当前位置:  开发笔记 > 编程语言 > 正文

当你尝试释放()已经释放c中的内存时会发生什么?

如何解决《当你尝试释放()已经释放c中的内存时会发生什么?》经验,为你挑选了5个好方法。

例如:

char * myString = malloc(sizeof(char)*STRING_BUFFER_SIZE);
free(myString);
free(myString);

这样做会有不良副作用吗?



1> Chris Conway..:

这是章节和经文.

如果参数[到free功能]不匹配的指针早些时候返回calloc,mallocrealloc功能,或如果空间已释放通过调用free或者realloc,该行为是不确定的.(ISO 9899:1999 - 编程语言 - C,第7.20.3.2节)


不,他们的确意味着"未定义".这恰好包括崩溃和内存损坏.
@OrionEdwards例如,编译器可以决定启动NetHack.
仅供参考:当C或C++说"未定义"时,它们通常意味着"崩溃"或"内存损坏"或同样可怕的东西.谨防.

2> mbac32768..:

无所事事,无声内存损坏或分段错误.



3> jbleners..:

是的,您可以获得导致程序崩溃的双重免费错误.它与malloc的内部数据结构有关,以跟踪分配的内存.



4> lillq..:

答案摘要:

是的,糟糕的事情可能并且可能会发生.

为了防止这种情况:

free(myString);
myString = NULL;

请注意,NULL如果创建了其他内容,则必须将对内存的所有引用设置为.

此外,调用free()NULL在不采取行动的结果.欲了解更多信息,请参阅:免费



5> Armin Ronach..:

不是那么聪明.谷歌提供双重免费漏洞.NULL释放后将指针设置为避免此类错误.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有