malloc,colloc,realloc内存分配,动态库,静态库的生成与调用
1.在main方法里面直接定義一個(gè)非常大的數(shù)組的時(shí)候,可能會(huì)出現(xiàn)棧溢出:錯(cuò)誤代碼演示:
#include<stdio.h>
#include<stdlib.h>
void main()
{
??? int a[1024 * 1024];
??? int num = 100;
??? system("pause");
}
錯(cuò)誤截圖:
2.在定義數(shù)組的時(shí)候要定義數(shù)組的長(zhǎng)度,否則會(huì)出現(xiàn)錯(cuò)誤。(特例:在GCC編譯器下,不會(huì)出現(xiàn)錯(cuò)誤(因?yàn)闃?biāo)準(zhǔn)不一樣))。
3.打印并且賦值的是:
for (int i = 0; i < length;i++)
{
??? printf("%d\n",a[i] = i);? //初始數(shù)組并打印
}
4.內(nèi)存分配可以通過三個(gè)函數(shù)實(shí)現(xiàn)
A.void *malloc(size_t size):malloc只管分配,不初始化內(nèi)容(size:Bytes to allocate:分配的字節(jié)數(shù))。
B.void *calloc(size_t,size_t size):分配內(nèi)存,并且初始化內(nèi)存信息為0,其有兩個(gè)參數(shù)(num:Number of elements;size:Length in bytes of each element),第一個(gè)參數(shù)是,開辟的數(shù)量,第二個(gè)參數(shù)是每個(gè)參數(shù)的大小。
C.void *realloc(void *memblock,size_t size);Reallocatememory blocks;用于分配內(nèi)存.
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會(huì)進(jìn)行內(nèi)存清零
?
例子:
#include<stdio.h>
#include <stdlib.h>
?
int main(int argc, char *argv[])
{
//只管分配
??? int *p1 = (int *)malloc(sizeof(int)* 10);
??? //calloc會(huì)進(jìn)行內(nèi)存清零
??? 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分配內(nèi)存
#include <stdio.h>
#include<stdlib.h>
?
void main()
{
??? //分配內(nèi)存
??? int *p = (int *)calloc(10,sizeof(int));
??? printf("%p\n", p);//輸出地址
??? int i;
??? for (i = 0; i < 10;i++)
??? {
??????? //*(p + i)等價(jià)于p[i]
??????? *(p + i) = i;
??? }
?
??? //變長(zhǎng),第一個(gè)參數(shù)是指針地址,第二個(gè)參數(shù)表示的是數(shù)組的個(gè)數(shù)
??? int *pnew = (int *)realloc(p,100000);
??? //realloc.第一種情況,后面的內(nèi)存沒有用,就直接擴(kuò)展變長(zhǎng)
??? //第二種情況,后面的內(nèi)存有人用,先分配新的長(zhǎng)度,拷貝原來原來的內(nèi)存,釋放原來的內(nèi)存
??? printf("%p",pnew);
??? for (int i = 10; i < 25000;i++)
??? {
??????? *(pnew + i) = i;
??? }
?
??? system("pause");
??? return 0;
}
6.新建項(xiàng)目dlllib
編寫代碼:
#include<stdio.h>
#include<stdlib.h>
?
void go()
{
??? printf("Hello World\n");
}
7.制作dll,右擊項(xiàng)目à屬性à配置屬性à常規(guī)à分別修改配置類型(動(dòng)態(tài)庫(kù).dll)和目標(biāo)文件名。
8.制作lib,右擊項(xiàng)目à屬性à配置屬性à常規(guī)à分別修改配置類型(動(dòng)態(tài)庫(kù).lib)和目標(biāo)文件名。
9.引入lib.lib的方式有
? A:將.lib拷貝到源代碼所在的目錄下。à通過代碼引入.lib。代碼是:
#pragma comment(lib,”test.lib”);??//其中test.lib就是要引入的.lib靜態(tài)庫(kù)(注意,也要將靜態(tài)庫(kù)對(duì)應(yīng)的.h放到源文件所在的位置)。
? B:將.lib拷貝到源代碼所在的目錄下。à通過配置的方式引入靜態(tài)庫(kù)。方式是:
??? 右擊項(xiàng)目à屬性à配置屬性à輸入à附加依賴項(xiàng)(如現(xiàn)有依賴項(xiàng)添加的方式添加.lib靜態(tài)庫(kù))。
?
總結(jié)
以上是生活随笔為你收集整理的malloc,colloc,realloc内存分配,动态库,静态库的生成与调用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微粒贷是根据什么评估 这些可以提升授信
- 下一篇: 小县城开陶艺吧怎么样 新项目真的很受关注