malloc,colloc,realloc内存分配,动态库,静态库的生成与调用
Posted jzssuanfa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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内存分配,动态库,静态库的生成与调用的主要内容,如果未能解决你的问题,请参考以下文章
C:malloc/calloc/realloc/alloca内存分配函数
C语言复习之malloc和realloc(为字符串数组分配内存)
C语言中动态内存分配函数的用法及作用?(比如malloc,calloc,realloc等)
堆的分配和释放(malloc,free,calloc,realloc)