c++ - 为什么交换二维数组指针不起作用?

标签 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;
}

最佳答案

默认情况下,大多数编译器将堆栈的默认内存限制设置得非常低(通常在 1mb 左右)。

假设每个 float 为 4 个字节,一个 1024 个单元的多维数组将占用 1024 x 1024 x 4 = 4,194,304 个字节或大约 4 兆字节。

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

关于c++ - 为什么交换二维数组指针不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21128579/

相关文章:

c++ - 从内存中运行进程 C/C++

c++ - 告诉 std::unordered_map 哈希函数是完美的

python - 调整引用另一个数组的numpy数组的大小

c++ - 静态数据成员数组边界的求值范围

c - 简单的 c 错误使指针来自整数而不进行强制转换

c - 动态分配内存中指针的访问值

c++ - qt 中对 QDeclarativePropertyMap 的 undefined reference

arrays - 为什么 Perl 不允许我将哈希引用的成员取消引用到数组中?

c - 需要帮助处理 C 中的二维结构数组

c++ - 如何在 C++ 中清除 unordered_map 的 unordered_map?