动态内存分配

在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地址写入,系统崩溃退出。

最后修改:2023 年 04 月 28 日
如果觉得我的文章对你有用,请随意赞赏