gpt4 book ai didi

内存分配时的 C++ 错误

转载 作者:行者123 更新时间:2023-12-02 09:28:17 24 4
gpt4 key购买 nike

我有一个关于 C++ 中内存分配的问题。

我的很多程序都在没有任何可预见原因的情况下崩溃了。当我开始测试寻找原因时,我发现了一些有趣的事情。

以下代码在执行时正确遵守并且不会崩溃。

#include <iostream>
using namespace std;

int main() {
char memblock[7200][140];
};

这段代码确实崩溃了

#include <iostream>
using namespace std;

int main() {
char memblock[7200][140][10];
};

这让我相信添加额外的维度是我陷入困境的原因。但是,后来我注意到这段代码也不起作用。

#include <iostream>
using namespace std;

int main() {
char memblock[7200][1400];
};

事实证明,数组声明中的维数对程序的功能没有影响。看起来可以分配给程序的内存总量是有上限的。 (我尝试了多个较小的数组声明,但这不起作用。)

大数组声明之前的任何指令都可以完美执行。 Windows 任务管理器告诉我,RAM 或 CPU 能力并不短缺。

所以,我的问题是:是什么导致程序崩溃?还有,有什么方法可以解决(或规避)这个问题吗?

最佳答案

您正在堆栈上分配这些数组。但堆栈是一种相当有限的资源。对于 Visual C++,默认最大大小为 1 MB。大数组应该分配在堆中。

关于内存分配时的 C++ 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29761926/

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