例如:
char * myString = malloc(sizeof(char)*STRING_BUFFER_SIZE); free(myString); free(myString);
这样做会有不良副作用吗?
这是章节和经文.
如果参数[到
free
功能]不匹配的指针早些时候返回calloc
,malloc
或realloc
功能,或如果空间已释放通过调用free
或者realloc
,该行为是不确定的.(ISO 9899:1999 - 编程语言 - C,第7.20.3.2节)
无所事事,无声内存损坏或分段错误.
是的,您可以获得导致程序崩溃的双重免费错误.它与malloc的内部数据结构有关,以跟踪分配的内存.
答案摘要:
是的,糟糕的事情可能并且可能会发生.
为了防止这种情况:
free(myString); myString = NULL;
请注意,NULL
如果创建了其他内容,则必须将对内存的所有引用设置为.
此外,调用free()
了NULL
在不采取行动的结果.欲了解更多信息,请参阅:免费
不是那么聪明.谷歌提供双重免费漏洞.NULL
释放后将指针设置为避免此类错误.