这里写自定义目录标题
//malloc如何在堆开辟内存空间 int arr[10];
//1开辟内存空间
int *p=malloc(sizeof(int *)*10);
if(p==NULL){
printf("error");
return -1;
//2赋值
for(size_t i=0;i<10;i++){
p[i]=i+10;
}
//3循环打印输出
for(size_t i=0;i<10;i++){
printf("%d ",*p);
p++}
free(p);
p=NULL;
打印完成以后会提示错误:
untitled1(93846,0x11108e600) malloc: *** error for object 0x600000178238: pointer being freed was not allocated
untitled1(93846,0x11108e600) malloc: *** set a breakpoint in malloc_error_break to debug
分析:free后的空间,不会立即失效,通常需要将free后的地址置为NULL,
free的地址必须是malloc申请的地址,否则会出错,所以3 打印中不用用指针进行循环遍历,因为最后指针的地址值发生了变化。