c++ - C++ 中结构的构造函数导致非零退出代码

标签 c++ struct exit-code

当我在下面的代码中为我的 SegTree 结构调用构造函数时,我一直得到一个非零退出代码。当我注释掉初始化结构的行时,程序运行没有问题。有人可以解释为什么会发生这种情况以及如何修复我的代码吗?

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <string>
#include <vector>
#include <string.h>

using namespace std;

struct SegTree{
    int N;
    long long tree [1<<20], arr [1<<20];
    SegTree(int x){ N = x; }
};

int main(){
    SegTree st(len);
    return 0;
}

请帮忙,提前致谢!

编辑:正如我在评论中提到的那样,我的问题不是数组的大小。当它们被放置在结构之外时,我能够制作数组并运行代码。

最佳答案

哇。这是一个结构:

struct SegTree{
    int N;
    long long tree [1<<20], arr [1<<20];

1<<20是 1 兆。 long long通常是 8 个字节,所以您的结构是 16 MB ...并且您在堆栈上分配它。通常,程序会为堆栈分配 1MB 空间……所以它放不下!

解决方案是将数组更改为 vector 。然后该数组将分配到堆上,您应该没问题:

    std::vector<long long> tree = {1<<20};
    std::vector<long long> arr  = {1<<20};

(一旦您使用 vector ,您可能会比在构造函数中以某个最大大小一次分配所有内存做得更好)。

关于c++ - C++ 中结构的构造函数导致非零退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44796537/

相关文章:

linux - 如何获取管道中第一个命令的退出状态?

c++ - 在 C++ 中返回线性列表和时间复杂度

c++ - 使用 htons 时的旧式转换

c - 当你在 C 的结构中有一个数组时,最佳实践是什么?

c - 多用途薪资系统 C

java - 如何在 Windows 批处理文件中获取 Java 程序的退出状态

bash - 基于 bash 中循环操作的带有错误代码的退出脚本

c++ - 什么是 C++ 结构开头的函数列表指针

c++ - 从哪个版本的 IE 开始支持 "Find on page"命令?

c - 自引用结构定义?