簡體   English   中英

C ++中的結構構造函數導致非零退出代碼

[英]Constructor of a Struct in C++ Causes Non-Zero 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 ...並且您正在將其分配在堆棧上。 通常,程序會為堆棧分配1Mbyte的內存,因此不適合!

解決方案是將數組更改為向量。 然后將在堆上分配該數組,您應該可以:

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

(一旦使用向量,您可能會比在構造函數中以某個最大大小一次分配所有內存更好地做得多)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM