c++堆栈溢出未处理的异常与大数组

标签 c++ arrays stack-overflow

是的,在查找了这个问题后,我认为这是因为我在我的类定义中有 wchar_t downloadedText[400000]; 我已经阅读了有关如何通过使用处理此问题的解决方案new 运算符分配空间,即: wchar_t *downloadedText; downloadedText = new wchar_t[400000];

但是我需要将类的实例写入文件,并且像上面那样分配变量似乎使用指针指向以不会写入我的文件的方式存储的数据。这也是我不能使用 std::vector 的原因。

我读到我可能有的另一个选择是我可以增加“堆栈”的大小。我使用 VS2010 作为我的 IDE,我位于我的项目属性 > 链接器 > 系统“堆栈提交大小”、“堆栈保留大小”、“堆提交大小”和“堆保留大小”字段中,但我不确定这是否是我该如何处理我的问题,如果是,应该如何正确设置适当的字段。

最佳答案

如果你必须这样做......你可以在写出对象后显式地写数组。例如。

write((char*)&myObjects[i]), sizeof(MyClass));
write((char*)downloadedText, sizeof(downloadedText[0]) * 400000);

并读回:

read((char*)&myObjects[i]), sizeof(MyClass));
downloadedText = new wchar_t[400000];
read((char*)downloadedText, sizeof(downloadedText[0]) * 400000);

然而,这是非常脆弱的并且容易出错。通过读取覆盖内存中的对象充其量是一种糟糕的形式,除非您使用的是明确为此目的创建的通常仅包含 POD 的结构。至少,请注意您必须在读取写入后设置 downloadedText 成员字段。

关于c++堆栈溢出未处理的异常与大数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10424155/

相关文章:

c++ - 术语 "source file"和 "translation unit"之间有什么区别?

Java:如何将堆栈的伪代码转换为数组

java - 如何解决这个java方法中的stackoverflow异常?

c# - StackOverflowException 对嵌套数据使用 Linq(Kit)

c++ - DBGrid 按计算字段排序

python - Cython - 使用 stdlib <random>

C++ 在 for 循环中使用预先计算的限制器

javascript - 在数组上使用 delete 和随后的 .push() 会影响性能/内存消耗吗?

从 C 中的另一个数组创建数组

c - C 函数调用时出现段错误