动态内存分配
在C99中,可以用变量做数组定义的大小,C99之前呢?
C99之前可以给指针分配一定大小的内存,来存放数组,这样就能实现定义数组的大小。
int *arr = (int*)malloc(n*sizeof(int));
malloc分配的是void*,需要强制转换成int*,然后用数组大小n乘以单个int占用的字节就可以把能存放n个int型的空间分配给了*arr。
malloc
-
使用malloc函数需要引入头文件
stdlib.h
-
malloc返回一个指针,类型为void*
-
如果malloc请求失败,返回NULL
-
malloc的参数为size,以字节为单位
-
使用free()释放内存
小记
对于以下代码段,正确的说法是:
char *p;
while(1){
p = malloc(1);
*p = 0;
}
- A. 最终程序会因为没有没有空间了而退出
- B. 最终程序会因为向0地址写入而退出
- C. 程序会一直运行下去
- D. 程序不能被编译
正确为B选项。一直给p分配内存,但不释放,最终malloc会因内存不足而请求失败,返回NULL。此时指针p的地址指向了NULL(0地址),此时对0地址写入,系统崩溃退出。