gpt4 book ai didi

c - c中argc的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:05:51 25 4
gpt4 key购买 nike

我收到 argc 参数的段错误。我是C语言的新手。请帮我解决这个问题。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int row1, row2, col1, col2, i, j, cnt=0;
int mat1[2000][2000], mat2[2000][2000];

printf("argc=%d", argc);

if (argc<5)
{
printf("\nPlease enter correct arguments <row_no_matrix1> <col_no_matrix1> <row_no_matrix2> <col_no_matrix2>\n");
exit(0);
}

row1 = atoi(argv[1]);
col1 = atoi(argv[2]);
row2 = atoi(argv[3]);
col2 = atoi(argv[4]);

printf("%d %d %d %d\n", row1, row2, col1, col2);
return 0;
}

最佳答案

您的矩阵对于您机器上的堆栈来说太大了。每个数组都有 400 万个整数,或大约 16 MiB 的存储空间;这是一个非常大的堆栈要求。

减少它们的大小或动态分配它们。

或者(如评论中所述),使它们成为具有“静态持续时间”的变量,或者在 main 中,前面加上关键字 static:

int main(int argc, char *argv[])
{
int row1, row2, col1, col2, i, j, cnt=0;
static int mat1[2000][2000], mat2[2000][2000];

或者定义在 main() 之外的文件作用域变量,同样在前面加上关键字 static:

static int mat1[2000][2000], mat2[2000][2000];

int main(int argc, char *argv[])
{
int row1, row2, col1, col2, i, j, cnt=0;

或者作为在 main() 之外定义的全局变量而不使用关键字 static(但只有当您有多个源文件需要按名称访问它们时才这样做) :

int mat1[2000][2000], mat2[2000][2000];

int main(int argc, char *argv[])
{
int row1, row2, col1, col2, i, j, cnt=0;

您也可以(同样,如评论中所述)增加堆栈大小。但是,我恭敬地建议这可能是最不令人满意的解决方案。

How to dynamically allocate the size of an array?

公平的问题。与您处理 100x100 阵列的频率相比,您认为您多久真正需要一对 400 万个单元阵列?另外,您使用的是 Windows(使用 MSVC 和 C89)还是非 Windows(使用 C99 或更高版本),还是使用 GCC 的 Windows?

还有,你学过指针吗?

总的来说,我认为你应该选择更小的数组。这是迄今为止最简单的解决方案。如果您必须拥有大数组,请使用静态分配的数组。

如果那行不通,我们将不得不检查指针,但这并不完美。

关于c - c中argc的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10770149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com