arrays - 数组数组中的分段错误取决于大小
问题描述
我有将文本加载到 char 数组数组中的代码char var [size_x][100]
,如果一维(在这种情况下size_x
)超过某个阈值(大约 100 万),我会遇到分段错误,我不明白。
由于我对 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()
family)。
#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;
}
推荐阅读
- python - 如何从同一目录中的模块导入?
- c - C:错误:数组有不完整的元素类型'void'
- mysql - 自动增加 MySQL 注册表
- floating-point - 为什么 getFloat() 中的浮点值变为 0.0?
- javascript - 带有单击事件的 HTML 元素调用函数并在角度 6 中具有锚标记的上下文菜单
- c++ - AABB 碰撞使实际精灵的大小翻倍
- doxygen - Doxygen:如何包含一个降价页面来记录一个组
- vba - Access 2010 VBA 类型不匹配(错误 13)或运行时错误 424(需要对象)
- git - 红点标记 BitBucket 差异视图
- r - 提取R中每个单词的第一个字母