【问题标题】:How define very large 2D array in C (like 1000*1000)如何在 C 中定义非常大的二维数组(如 1000*1000)
【发布时间】:2020-04-23 09:51:40
【问题描述】:

解决办法是什么? 你知道帮助我创建一个大数组的方法吗? 我使用 (int) 语句创建一个 100 * 100 数组没有问题,而这个 1000 * 1000 数组的命令会导致错误代码。

#include<stdio.h>
#include<string.h>
#define true 1

int main()
{
    int i, j;

    int a[1000][1000];
    int b[1000][1000];
    int x = 0;
    i = 0;
    while (true)
    {
        scanf_s("%d", &b[i]);
        scanf_s("%c", &ch);
        if (ch !='-')
        {
            x = (i+1);
            break;
        }
        i++;
    }
    printf("%d\n\n", x);

    for (i = 0; i < x; i++)
    {
        for (j = 0; j < strlen(b[i]); j++)
        {
            printf("%d\n\n", b[i][j]);
        }
    }


return 0;
}

【问题讨论】:

  • "导致错误代码" 什么错误?您需要展示问题以获得帮助。你用的是什么编译器?这是什么平台?这些数组每个都有 1000000 个元素,因此它们的大小将达到兆字​​节的数量级。如果这是针对微控制器的,那就不合适了。
  • 你分配你的int a[1000][1000] 在堆栈上。您可以快速耗尽堆栈空间。最好在全局范围内分配它或使用malloc
  • scanf_s 要求为 c、C、s、S 或 [ 类型的所有输入参数指定缓冲区大小。缓冲区大小作为紧跟在指向缓冲区或变量的指针之后的附加参数 传递。你不要那样做。可能,如果您打开编译器的 warnings,它会警告您。
  • 并且ch 没有被声明。
  • 亲爱的 Paul Ogilvie,当我使用 malloc 创建二维数组时,我收到了来自 Visual Studio 的 stackoverflow 消息。我该怎么办 ? @PaulOgilvie

标签: c arrays string visual-studio int


【解决方案1】:

将程序编译为 x64 而不是 x86。 x86 堆大小(微软编译器限制为 2GB)。

选择 x64

【讨论】:

  • 怎么样?我不知道怎么办?
  • @MostafaBorhani 看到我的回答 GLUM
【解决方案2】:

我用 malloc 更改了它,但它仍然有运行时错误

#include<stdio.h>
#include<string.h>
#define true 1

int main()
{
    int n;
    scanf_s("%d", &n);
    int i, j;

    int** b = (int**)malloc(10000 * sizeof(int*));
    for (i = 0; i < 100000; i++)
    {
        b[i] = (int*)malloc(10000 * sizeof(int));
    }
    char ch;
    int x = 0;
    i = 0;
    while (true)
    {
        scanf_s("%d", &b[i]);
        scanf_s("%c", &ch);
        if (ch != '-')
        {
            x = (i + 1);
            break;
        }
        i++;
    }
    printf("%d\n\n", x);

    for (i = 0; i < x; i++)
    {
        for (j = 0; j < strlen(b[i]); j++)
        {
            printf("%d\n\n", b[i][j]);
        }
    }
    return 0;
}

【讨论】:

  • استارتاپ.exe 中 0x7A9AFF5C (ucrtbased.dll) 处未处理的异常:0xC0000005:访问冲突读取位置 0x0000007A。那是视觉工作室错误
  • 修改你的问题,不要回答它
猜你喜欢
  • 1970-01-01
  • 2010-09-08
  • 2013-03-26
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 2012-03-13
相关资源
最近更新 更多