free释放数组指针问题

吃着油条唱歌 2018-07-31 11:37:57
#include<stdio.h>
void main()
{
int a[5],i=0;
for(i=0;i<5;i++)
a[i]=0;
free(&a[4]);
printf("%d",sizeof(a));
}
为什么会引发错误呢?
...全文
712 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
super_admi 2018-09-14
  • 打赏
  • 举报
回复
有生,如何摆脱死?

引用 8 楼 zhao4zhong1 的回复:
无new,无delete
无malloc,无free
无生,无死。
赵4老师 2018-08-01
  • 打赏
  • 举报
回复
无new,无delete
无malloc,无free
无生,无死。
AlbertS 2018-08-01
  • 打赏
  • 举报
回复
栈空间不需要释放空间,出了作用域空间会自动回收,
只有通过new或者malloc之类函数申请的空间才需要释放
new和delete是一对
malloc和free是一对
_肆 2018-07-31
  • 打赏
  • 举报
回复
free释放数组指针问题?你这就是个数组,哪有指针,所以何谈释放
  • 打赏
  • 举报
回复
C或C++的Malloc或new是用的堆空间,需要手动用Free或delete释放
  • 打赏
  • 举报
回复
需要把堆空间和栈空间搞明白,这里的数组是用的栈空间,是不需要手动释放的
EINPROGRESS 2018-07-31
  • 打赏
  • 举报
回复
你这是释放指向临时变量,即栈空间的指针。临时变量是通过移动sp指针来获取内存的。c里面free和malloc配套对应使用。c++里new和delete配套使用。堆是对内存预先分配的一段区间,常见有伙伴算法来管理堆上的内存。linux上通过cat /proc/pid/maps来查看系统为应用分配的内存区间。其中stack即栈空间,heap即堆空间。可以参考我博客<https://blog.csdn.net/kwanson/article/details/80298182>
吃着油条唱歌 2018-07-31
  • 打赏
  • 举报
回复
引用 3 楼 qq_38319117 的回复:
free释放数组指针问题?你这就是个数组,哪有指针,所以何谈释放
可能我有些地方学的不是很牢固,但是&a[4]是个确实指针,你真得好好翻翻书了
weixin_38305120 2018-07-31
  • 打赏
  • 举报
回复
new或者是malloc出来的才需要释放,像这种int a[5]这种是普通变量,放在内存栈区,走出作用于会自动释放;你这样free栈地址肯定会出错啊

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧