c 语言 !一个关于free() 的使用问题!

来源:百度知道 编辑:UC知道 时间:2024/06/05 12:53:58
#include<stdio.h>
#include<stdlib.h>
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i,*p,*q;
p=a;
for(q=p+5;q<p+10;q++)
*(q-1)=*q;
p=p+9;
free(p);/*释放a[10]的内存空间!*/
for(i=0;i<9;i++)
printf("%d,",a[i]);
}

运行不了啊 我就是想删除数组中一个元素后 在把数组最后一个元素的空间释放 为什么总出错啊?

简单的理解:
数组是静态分配的内存空间,过了生存周期,系统自动释放
free用于释放动态分配的内存空间,动态分配的内存一定要释放

用数组申请的空间,也不需要释放,也释放不了

数组所占用的内存,是静态内存,不是动态的
就像一个整型变量int i,它也占内存,它不需要释放,也不能释放的
数组只是多个这个int i连成一片而已,无他

没有申请堆上空间,怎么释放

第一 free 和 malloc 是一对,你没用malloc就不用Free
其次,你的P指的都不是原来的位子了,就是用malloc了,也不对,P都+9了。