日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

malloc,colloc,realloc内存分配,动态库,静态库的生成与调用

發布時間:2024/9/27 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 malloc,colloc,realloc内存分配,动态库,静态库的生成与调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


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内存分配,动态库,静态库的生成与调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。