gpt4 book ai didi

c - 扫描整数值时出现段错误

转载 作者:行者123 更新时间:2023-12-05 01:36:18 25 4
gpt4 key购买 nike

虽然这很奇怪,但我在扫描整数值时遇到了段错误。

这是我的程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int t,n,i,j;
char c;
int grid[1000][1000],right[1000][1000],down[1000][1000];
scanf("%d",&t);
printf("hello\n");
while(t--)
{
scanf("%d",&n);

memset(right, 0, sizeof(int) * 1000 *1000);
memset(down, 0, sizeof(int) * 1000 *1000);

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%c",&c);
printf("CHAR = %c\n", c);
if(c == '.')
grid[i][j] = 1;
else
grid[i][j] = 0;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d",grid[i][j]);
}
}
}
return 0;
}

执行 gdb 显示 scanf("%d",&t); 行出现段错误。我不知道这是怎么回事?

[在linux 32位机器上使用gcc-4.8.4]

最佳答案

问题是您的数组:gridrightdown 太大,无法放入堆栈。

就没有编译错误的原因而言:

因为这段代码无论从语法还是语义上都没有错。链接器也没有任何问题。

当加载程序试图加载程序并在堆栈上分配那么多内存时,就会出现问题。堆栈在 Linux 系统上通常为 8 MB,而您的阵列超过了该值。

您可以将它们设为静态(如评论中所建议的那样),因为静态成员是在 bss 或数据段上分配的。但实际上,如果您需要这么大的阵列,您需要重新考虑。

关于c - 扫描整数值时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33283594/

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