c语言关于内存释放问题

什么是动态分配的内存呢?例如:char*buf=newchar[100];使用结束时需要释放内存不?咋释放?谢谢希望高手们能给出一个标准的答案,并简单说说原因。谢谢到底是... 什么是 动态分配的内存呢?
例如:char* buf = new char[100];
使用结束时需要释放内存不?咋释放?谢谢
希望高手们能给出一个标准的答案,并简单说说原因。谢谢
到底是free还是delete,我都糊涂了。可否说说原因
展开
 我来答
cdhover
2008-02-27 · TA获得超过236个赞
知道答主
回答量:119
采纳率:0%
帮助的人:0
展开全部
早期 c 语言中分配内存用 malloc, 释放使用 free;
new delete 主要在c++中引入,以支持对象的动态分配、删除

总结起来:
用malloc分配,用free释放
用new分配,用delete释放
用new [] 分配,用delete []释放!

以上成对使用,不用混合使用!

所以
char* buf = new char[100];
删除用 delete []buf;

参考资料: Effective c++

lrb1983091
推荐于2018-05-10 · TA获得超过825个赞
知道小有建树答主
回答量:572
采纳率:0%
帮助的人:894万
展开全部
malloc,free是c语言中用法

new,delete是c++中用法

都是成对的,你用了new释放就用delete好了

申请了内存不用了的话一定要释放

否则会有内存泄露,系统内存会越来越少
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
在晴天的雨伞
2018-07-05 · TA获得超过6869个赞
知道大有可为答主
回答量:5761
采纳率:86%
帮助的人:1197万
展开全部
是InitStack(s)吧?程序里就没有InitSqlist()。
因为栈内容没有初始化,所以访问那个s->top时就出错了,并不是分配内存的malloc的问题。
把主函数里这两行改一下:
Stack *s; /* 这里没有给s分配内存,这只是一个Stack的指针*/
InitStack(s);
改为:
Stack s; /* 这样就给s分配空间了, s.top现在就可以用了*/
InitStack(&s);
这个问题就好了。

相应地,以后使用栈时注意使用指针就好:
ShowStack(s);
改为
ShowStack(&s);

还有一种做法,就是在:
Stack *s;
InitStack(s);
中间给指针s分配内存,让指针s指向正确的结构:
Stack *s;
s = (Stack*)malloc(sizeof(Stack));
InitStack(s);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
势如云5j
2008-02-27 · TA获得超过2030个赞
知道小有建树答主
回答量:601
采纳率:0%
帮助的人:488万
展开全部
这是C++的用法,应该用delete
在C中用malloc开辟内存空间,用free释放。
本题:delete []buf

注意:delete buf是错误的!!!因为delete buf只是删除了开辟的内存空间的第一个地址,后面的都没有释放!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rezood
2008-02-27 · TA获得超过329个赞
知道小有建树答主
回答量:527
采纳率:0%
帮助的人:332万
展开全部
需要释放的,要不内存泄漏
free(buf);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式