leo*_*xyz 1 c free gcc segmentation-fault
我在下面的代码中观察到一个非常奇怪的行为.
按原样编译,everythig按预期工作:输出为"这是一个示例程序.".
如果我取消注释所有注释行,我在第一次调用free()时会出现分段错误.
理论上评论不应该改变行为,对吧?这里有什么问题?
PS:我在Arch Linux上使用gcc(GCC)4.9.2 20141224(预发行版)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main () {
char *welcome;
// int max;
// int x;
free(welcome);
welcome = strdup("This will be discarded.");
free(welcome);
welcome = strdup("This is a sample program.\n");
printf ("%s\n", welcome);
// max = 80;
// x = 1;
// while ( x <= max ) {
// int y;
// y = 1 ;
// while ( y <= x ) {
// printf ( "#" ) ;
// y = y + 1 ;
// }
// printf ( "\n" ) ;
// x = x + 1 ;
// }
return 1 ;
}
Run Code Online (Sandbox Code Playgroud)
理论上评论不应该改变行为,对吧?这里有什么问题?
问题是它不是一个NULL指针,因为它尚未初始化,因此调用free()试图在随机地址解除分配:
char *welcome;
// int max;
// int x;
free(welcome);
Run Code Online (Sandbox Code Playgroud)
如果ptr与之前由malloc(),calloc(),realloc()或aligned_alloc()返回的指针不匹配,则行为未定义.