c - 为什么我的程序在定义两个大数组时会崩溃?
问题描述
我目前有以下代码:
#define ARRAY_SIZE 1000000
#define CHILDS 2
typedef struct
{
char a[20];
int b;
} shared_data_type;
int main()
{
int i;
// I need 2 arrays and 1 variable of this type
shared_data_type v1[ARRAY_SIZE], v2[ARRAY_SIZE], aux;
srand((unsigned)time(NULL));
for (i = 0; i < ARRAY_SIZE; i++)
{
strcpy(v1[i].a, "RANDOM STRING");
v1[i].b = rand() % 50;
}
return 0;
}
但是如果我用这行代码运行程序:shared_data_type v1[ARRAY_SIZE], v2[ARRAY_SIZE], aux;
我在输出中得到这个错误:make: *** [run] Segmentation fault (core dumped)
。
我究竟做错了什么?
解决方案
尝试在系统内存中分配数组而不是进程的堆栈:
#define ARRAY_SIZE 1000000
#define CHILDS 2
typedef struct
{
char a[20];
int b;
} shared_data_type;
int main()
{
int i;
// I need 2 arrays and 1 variable of this type
shared_data_type * v1, * v2, aux;
v1 = malloc(ARRAY_SIZE * sizeof(*v1);
v2 = malloc(ARRAY_SIZE * sizeof(*v2);
srand((unsigned)time(NULL));
for (i = 0; i < ARRAY_SIZE; i++)
{
strcpy(v1[i].a, "RANDOM STRING");
v1[i].b = rand() % 50;
}
return 0;
}
推荐阅读
- c# - 为行星设置重力时出现 Unity/C# 错误
- excel - 使用 vba 的 Excel TOC - 删除了前导零
- javascript - Vee-validate 不适用于使用 Nuxt.js 和 Vuetify 的范围
- node.js - PostgreSQL 使用 massjs 和节点抛出错误“函数计数(整数)不存在”,但适用于 Postico
- html - CSS:由于 css 链接,php 弄乱了模板 css
- python - 日期时间 12 小时格式 Pandas Python
- html - 如何在引导程序 4 中使子内容相对于父容器垂直居中
- c# - ASP.NET Core 2.x - 代理服务提供者
- angular - 复选框有困难
- microsoft-teams - 使用 msteams URI 方案启动 Teams 与特定联系人的聊天