为什么交换2d数组指针不起作用?

时间:2014-01-15 03:26:27

标签: c++ arrays pointers

我正在尝试进行简单的计算,我需要将指针交换到两个数组。所以,我可以在计算时在这两个数组之间切换。以下是该方向的简单代码。如果我注释掉代码,第一个代码运行正常,但第二个代码给出分段错误。我不明白注释代码是如何产生任何影响的。它只是创建一个数组。我的代码中是否还有其他错误导致这个奇怪的问题?

运行良好

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
/*
    int fixed[1024][1024];

    for (int i = 0; i < 1024; i++) {
        for (int j = 0; j < 1024; j++) {
            fixed[i][j] = 1;
        }
    }
*/  

    float o_array[1024][1024];
    float n_array[1024][1024];
    float (*old_array)[1024] = o_array;
    float (*new_array)[1024] = n_array;

    for (int i = 0; i < 1024; i++) {
        for (int j = 0; j < 1024; j++) {
            old_array[i][j] = 100.0f;
        }
    }
    return 0;
}

这给出了分段错误

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
    int fixed[1024][1024];

    for (int i = 0; i < 1024; i++) {      
        for (int j = 0; j < 1024; j++) {
            fixed[i][j] = 1;
        }   
    }
   float o_array[1024][1024];
   float n_array[1024][1024];
   float (*old_array)[1024] = o_array;
   float (*new_array)[1024] = n_array;

   for (int i = 0; i < 1024; i++) {
       for (int j = 0; j < 1024; j++) {
           old_array[i][j] = 100.0f;
       }
   }
   return 0;
}

1 个答案:

答案 0 :(得分:1)

默认情况下,大多数编译器将堆栈的默认内存限制设置得相当低(通常约为1mb)。

假设每个浮点数是4个字节,1024个单位的多维数组将占用1024 x 1024 x 4 = 4,194,304个字节或大约4兆字节。

您可以使用命令行或IDE的构建/链接器选项来增加编译器堆栈的大小。