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内存分配,动态库,静态库的生成与调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微粒贷是根据什么评估 这些可以提升授信
- 下一篇: 单线程实现检索当当网泄露的1GB用户数据