首页 > 解决方案 > 数组数组中的分段错误取决于大小

问题描述

我有将文本加载到 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;
}

标签: arraysc

解决方案


您正在堆栈上分配大的东西并导致堆栈溢出。

要动态分配大的东西,你应该使用堆(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;
}

推荐阅读