天天看點

malloc,colloc,realloc記憶體配置設定,動态庫,靜态庫的生成與調用



1.在main方法裡面直接定義一個非常大的數組的時候,可能會出現棧溢出:錯誤代碼示範:

#include<stdio.h>

#include<stdlib.h>

void

main()

{

int

a[1024 * 1024];

num = 100;

system("pause");

}

錯誤截圖:

malloc,colloc,realloc記憶體配置設定,動态庫,靜态庫的生成與調用

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

<stdlib.h>

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);

i < 10;

i++)

p1[i]

= i;

p2[i]

getchar();

return 0;

5.realloc配置設定記憶體

<stdio.h>

//配置設定記憶體

int *p

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

printf("%p\n",

p);//輸出位址

i;

for (i

= 0; i < 10;i++)

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

*(p +

i) =

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

int *pnew

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

//realloc.第一種情況,後面的記憶體沒有用,就直接擴充變長

//第二種情況,後面的記憶體有人用,先配置設定新的長度,拷貝原來原來的記憶體,釋放原來的記憶體

printf("%p",pnew);

i = 10;

i < 25000;i++)

*(pnew +

6.建立項目dlllib

編寫代碼:

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靜态庫)。

繼續閱讀