1. 程式人生 > >malloc,colloc,realloc內存分配,動態庫,靜態庫的生成與調用

malloc,colloc,realloc內存分配,動態庫,靜態庫的生成與調用

lac 輸出 初始化 clu 技術 pragma num idt return

??

1.main方法裏面直接定義一個很大的數組的時候。可能會出現棧溢出:錯誤代碼演示:

#include<stdio.h>

#include<stdlib.h>

void main()

{

int a[1024 * 1024];

int num = 100;

system("pause");

}

錯誤截圖:

技術分享

2.在定義數組的時候要定義數組的長度,否則會出現錯誤。

(特例:在GCC編譯器下,不會出現錯誤(由於標準不一樣))。

3.打印而且賦值的是:

for (int i = 0; i < length;i++)

{

printf("%d\n",a[i] = i); //初始數組並打印

}

4.內存分配能夠通過三個函數實現

A.void *malloc(size_t size)malloc僅僅管分配,不初始化內容(size:Bytes to allocate:分配的字節數)

B.void *calloc(size_t,size_t size):分配內存,而且初始化內存信息為0,其有兩個參數(num:Number of elements;size:Length in bytes of each element),第一個參數是,開辟的數量,第二個參數是每一個參數的大小。

C.void *realloc(void *memblock,size_t size);Reallocatememory blocks;

用於分配內存.

memblock:Pointer to previously alloctedmemory block;

size:New size in bytes

比如:

int *p1 = (int*)malloc(sizeof(int)*10);//僅僅管分配。不初始化

int *p2 = (int*)calloc(10,sizeof(int));//calloc會進行內存清零

樣例:

#include<stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[])

{

//僅僅管分配

int *p1 = (int *)malloc(sizeof(int)* 10);

//calloc會進行內存清零

int *p2 = (int *)calloc(10, sizeof(int));

printf("%p,%p", p1, p2);

for (int i = 0; i < 10; i++)

{

p1[i] = i;

p2[i] = i;

}

getchar();

return 0;

}

5.realloc分配內存

#include <stdio.h>

#include<stdlib.h>

void main()

{

//分配內存

int *p = (int *)calloc(10,sizeof(int));

printf("%p\n", p);//輸出地址

int i;

for (i = 0; i < 10;i++)

{

//*(p + i)等價於p[i]

*(p + i) = i;

}

//變長,第一個參數是指針地址。第二個參數表示的是數組的個數

int *pnew = (int *)realloc(p,100000);

//realloc.第一種情況,後面的內存沒實用,就直接擴展變長

//另外一種情況。後面的內存有人用,先分配新的長度,拷貝原來原來的內存,釋放原來的內存

printf("%p",pnew);

for (int i = 10; i < 25000;i++)

{

*(pnew + i) = i;

}

system("pause");

return 0;

}

6.新建項目dlllib

編寫代碼:

#include<stdio.h>

#include<stdlib.h>

void go()

{

printf("Hello World\n");

}

7.制作dll,右擊項目à屬性à配置屬性à常規à分別改動配置類型(動態庫.dll)和目標文件名稱。

8.制作lib,右擊項目à屬性à配置屬性à常規à分別改動配置類型(動態庫.lib)和目標文件名稱。

9.引入lib.lib的方式有

A:.lib復制到源碼所在的文件夾下。à通過代碼引入.lib

代碼是:

#pragma comment(lib,”test.lib”); //當中test.lib就是要引入的.lib靜態庫(註意,也要將靜態庫相應的.h放到源文件所在的位置)。

B:.lib復制到源碼所在的文件夾下。

à通過配置的方式引入靜態庫。

方式是:

右擊項目à屬性à配置屬性à輸入à附加依賴項(如現有依賴項加入的方式加入.lib靜態庫)。

malloc,colloc,realloc內存分配,動態庫,靜態庫的生成與調用