gpt4 book ai didi

c - 这个段错误的原因是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 02:05:55 24 4
gpt4 key购买 nike

考虑以下片段:

void init ()
{
int i,j;
ioctl(0, TIOCGWINSZ, &w);

X=w.ws_col;
Y=w.ws_row - 9;
printf("X=%d,Y=%d\n",X,Y); // X and Y looks good, 144 and 32
getch();
Terrain=malloc(Y);
for(i=0;i<Y;i++)
Terrain[i]=malloc(X);
printf("Created terrain\n"); //OK
Terrain[6][0]=getch();
printf("%x\n",Terrain[6][0]); getch(); //No problem accessing Terrain[6][0]
for (i = 0; i < Y; i++)
{
for (j = 0; j < X-1; j++)
{
if ((i == 0) || (j == 0) || (j == (X - 2)) || (i == (Y - 1)))
{printf("%d:%d\n",i,j);Terrain[i][j] = '#';printf(" '#'OK\n");} //seg fault in this line for i=6,j=0
else
{printf("%d:%d\n",i,j);Terrain[i][j] = ' ';printf(" '_'OK\n");}
}
printf("%d:%d",i,X-1);
Terrain[i][X - 1] = '\0';printf(" 'o'OK\n");
}
}

输出是这样的...

...

5:141

'_'OK

5:142

'#'OK

5:143 'o'OK

6:0

Segmentation fault (core dumped)

dipto@dipto-VirtualBox:~$

如果我使用相同大小的静态数组,即 144 和 32,则没有问题。
我是否遗漏或忽略了什么?

最佳答案

您没有显示关键变量,例如 X,尤其是 Y。

分配内存时,通常需要乘数来计算数组每个成员的字节大小。 “short”通常需要 2 个。“int”现在有点棘手,可以是 4 个或 8 个。类似于 Terrain=malloc(Y*sizeof(Terrain[0]))

如果没有乘数,您就不会分配足够的内存,您的生存取决于内存的分配方式以及超出实际内存末端时会踩到什么。

关于c - 这个段错误的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20583438/

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