Als*_*man -1 c malloc pointers
为什么这段代码没有给我分段错误?我只分配了1个字符,但输入了1个以上的字符。
char **names;
names=malloc(2*sizeof(char *));
names[0]=malloc(sizeof(char)*1) ;
names[0]="ATCAHCTACHATCCACTATCAHCTACHATCCACTATCAHCTACHATCCACTATCAHCTACHATC";
printf("%s",names[0]);
Run Code Online (Sandbox Code Playgroud)
我希望它会产生细分错误。
在你的代码中
names[0]=malloc(sizeof(char)*1) ;
names[0]="ATCAHCTACHATCCACTATCAHCTACHATCCACTATCAHCTACHATCCACTATCAHCTACHATC";
Run Code Online (Sandbox Code Playgroud)
您基本上是在覆盖变量的值names[0],即存储指向它的另一个指针(字符串文字的起始地址)。没有理由应该产生分段错误。但是,这将导致内存泄漏,因为您将丢失返回的原始指针,malloc()并且将永远没有机会free()。
OTOH,如果您会写类似
names[0]=malloc(sizeof(char)*1) ;
strcpy(names[0], "ATCAHCTACHATCCACTATCAHCTACHATCCACTATCAHCTACHATCCACTATCAHCTACHATC");
Run Code Online (Sandbox Code Playgroud)
在尝试访问超出分配范围的内存位置的地方,您将调用未定义的行为。再者,分割错误是许多可能的副作用之一,它从未被保证。