- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
运行此代码时,我在 scanf() 处遇到段错误。这可能是由于大数组的声明(我通过注释数组声明来检查它)。
#include<stdio.h>
int main()
{
int test;
//int n,ok,counter,i,j;
char a[1000][1000];
int x[1000][1000],y[1000][1000];
scanf("%d",&test);
printf("%d",test);
return 0;
}
因为我需要这些数组,所以有人可以建议我如何纠正此代码。
最佳答案
问题是您正在本地定义一些巨大的对象。局部变量在堆栈上创建,并且堆栈有限制(每个线程)。有时堆栈最大可达 1 MB。你的数组将远远超出这个范围。我的猜测是你实际上溢出了堆栈。您可以将数组定义移到 main 之外,并且您的程序应该可以工作,因为这些数组不会在堆栈上创建。您还可以通过在 main
中将数组设置为 static
来定义数组。这与在外部声明它们具有相同的效果。
全局定义的变量(包括未初始化的数组)和静态
未初始化的变量(即使它们在函数中)通常会放置在数据段中,并在程序运行时进行初始化。它们也保证被设置为全0。这个Wiki reference在 C 中将此数据区域描述为:
BSS in C
In C, statically-allocated objects without an explicit initializer are initialized to zero (for arithmetic types) or a null pointer (for pointer types). Implementations of C typically represent zero values and null pointer values using a bit pattern consisting solely of zero-valued bits (though this is not required by the C standard). Hence, the BSS section typically includes all uninitialized variables declared at file scope (i.e., outside of any function) as well as uninitialized local variables declared with the static keyword. An implementation may also assign statically-allocated variables initialized with a value consisting solely of zero-valued bits to the bss section.
BSS
段不像堆栈那样受到约束。如果资源存在并且您没有超出任何进程配额,BSS
可能会耗尽可用内存。
另一种选择是使用malloc
动态分配数组,这会将它们放在堆上。以下代码是创建数组的最简单方法。我使用#define 来更清楚什么是行和列。定义这些数组并分配内存后,可以像任何普通的 2D 数组一样使用它们。
#include<stdio.h>
#include<stdlib.h>
int main()
{
#define ROWS 1000
#define COLUMNS 1000
int test;
char (*a)[COLUMNS] = malloc(ROWS * sizeof *a);
int (*x)[COLUMNS] = malloc(ROWS * sizeof *x);
int (*y)[COLUMNS] = malloc(ROWS * sizeof *y);
a[100][20] = 'X';
x[4][999] = 666;
y[500][0] = 42;
scanf("%d",&test);
printf("%d",test);
free(a);
free(x);
free(y);
return 0;
}
关于c - scanf 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26077874/
我的运动需要一些帮助。 Question of exercise 这是我的代码: #include main() { int price,new_price; char code; printf(
这个问题在这里已经有了答案: scanf() leaves the newline character in the buffer (7 个答案) 关闭 5 年前。 我有这段代码(由于逻辑是家庭作业
我这里有一段代码,在输入带空格的字符串时会出现一些不需要的行为。例如 print illegal_argument。当输入包含多个单词时,我希望它只注册第一个单词。 目前发生的是: christian
我的测试输入是 [1,2,3] [4,5,6] [7,8,9] [9,9] 或者它可以是单个 2d 坐标之前的任意数量的 3d 坐标,我的代码是 #include #include #includ
这个问题在这里已经有了答案: What does space in scanf mean? [duplicate] (6 个答案) 关闭 7 年前。 像这样在scanf中加一个空格的目的是什么 sc
#include int main() { int n; scanf("%d", &n); printf(n); return 0; } 这是我的代码,我很愚蠢,可能
程序要求用户输入 2 名学生的姓名、ID 等,将数据写入文件并从文件中读回数据。 #include #include #include #include #include int main(
这个问题在这里已经有了答案: abnormal behavior of scanf [duplicate] (3 个答案) 关闭 8 年前。 今天我遇到了一个问题,当我使用两次接受字符作为输入的 s
我正在用 c 编写一个程序来读取文件的内容。代码如下: #include void main() { char line[90]; while(scanf("%79[^\
main() { int d,a; printf("Enter the digit :"); scanf("%d",&d); printf("Enter another
为什么为 scanf 输入添加多个句点会跳过下一个 scanf 函数。示例输入:b. b. int main (void) { char b[7] = " "; printf("Thi
我想我已经尝试过任何方法(刷新 stdin、scanf 以使用换行符等),但没有任何效果如我所希望的那样。由于某种原因,第三个 scanf 在以下代码中修改了第二个 scanf 中的变量: #incl
这个问题在这里已经有了答案: Scanf skips every other while loop in C (10 个答案) 关闭 6 年前。 我想做一个计算器,只是一个带有循环和基本操作的简单计
如果没有初始化 ("mod=0") ,这段代码进入死循环。我不明白为什么这段代码会循环,即使我使用了 getchar();删除缓冲区。当我先输入“1”,然后再输入“a”时,就会出现无限循环。谁能帮助我
当我为 scanf() 输入一个值时 它只是跳过紧随其后的第二个、第三个和任何其他 scanf()。 这是我的代码: #define _CRT_SECURE_NO_WARNINGS #include
#include #include void sstring(); int main() { char ch1[10],ch2; printf("Ent
这是一个计算房间内人员年龄的简单程序。我正处于初始阶段,现在我看到我不知道哪些变量(我的意思是我在 scanf 之前声明的变量,然后是 scanf 中的占位符)用于 scanf;如何选择和应用正确的变
这个问题在这里已经有了答案: scanf() leaves the newline character in the buffer (7 个答案) 关闭 5 年前。 我知道 scanf() 的用法,
我已经阅读了扫描集的行为。通过研究和测试,我遇到了一个问题。 难道 scanf("%[^\n]") 的行为与 scanf("%s") 一样吗? scanf("%s") 正在消耗字符,直到在 stdin
我遇到了一个问题,当我使用 scanf 将字符串存储到 char 指针中时,我有 3 个输入 - 姓名、姓氏和年龄,姓氏的最后一个 char 值被替换为年龄输出以更好地解释。 Q-riosity v0
我是一名优秀的程序员,十分优秀!