c-数组中的分段故障取决于大小



我有一段代码,它将文本加载到一个字符数组char var [size_x][100]的数组中,如果一维(在本例中为size_x(超过某个阈值(大约1mln(,我会遇到分段错误,我不理解。

由于我对C没有那么丰富的经验,我想知道是否有人能告诉我为什么这会出错。

非常感谢您的帮助!

#include <stdio.h>
#include <string.h>
int main() {
int size_x = 10000; // works
//int size_x = 1000000; // segmentation fault
char arr[size_x][100];
char var[] = "hello world";
memcpy(&arr[0], &var, sizeof(var));
printf("var: '%s'n", arr[0]);
return 0;
}

您在堆栈上分配了大量内容,导致堆栈溢出。

要动态分配大的东西,应该使用堆(malloc()家族(。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int size_x = 10000;
//int size_x = 1000000;
char (*arr)[100] = malloc(sizeof(*arr) * size_x);
char var[] = "hello world";
memcpy(&arr[0], &var, sizeof(var));
printf("var: '%s'n", arr[0]);
free(arr);
return 0;
}

最新更新