gpt4 book ai didi

c - 为什么这段代码可以工作并且不会产生段错误?

转载 作者:行者123 更新时间:2023-11-30 18:17:18 26 4
gpt4 key购买 nike

为什么这段代码没有给我段错误?我只分配了 1 个字符,但输入了超过 1 个字符。

char **names;

names=malloc(2*sizeof(char *));
names[0]=malloc(sizeof(char)*1) ;

names[0]="ATCAHCTACHATCCACTATCAHCTACHATCCACTATCAHCTACHATCCACTATCAHCTACHATC";

printf("%s",names[0]);

我预计它会产生段错误。

最佳答案

在你的代码中

names[0]=malloc(sizeof(char)*1) ;
names[0]="ATCAHCTACHATCCACTATCAHCTACHATCCACTATCAHCTACHATCCACTATCAHCTACHATC";

您基本上覆盖了变量names[0]的值,即存储另一个指向它的指针(字符串文字的起始地址)。它没有理由产生段错误。然而,它会导致memory leak ,因为您将丢失 malloc() 返回的原始指针,并且永远没有机会 free() 它。

OTOH,如果你会写类似的东西

names[0]=malloc(sizeof(char)*1) ;
strcpy(names[0], "ATCAHCTACHATCCACTATCAHCTACHATCCACTATCAHCTACHATCCACTATCAHCTACHATC");

当您尝试访问超出分配边界的内存位置时,您将调用 undefined behavior 。另外,段错误是众多可能的副作用之一,它永远无法得到保证。

关于c - 为什么这段代码可以工作并且不会产生段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57076129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com