C++ 获取cygwin_异常::打开_stackdumpfile处理向量

C++ 获取cygwin_异常::打开_stackdumpfile处理向量,c++,vector,stack-dump,C++,Vector,Stack Dump,我得到cygwin_exception::open_stackdumpfile试图运行我的代码。我想这是一个关于记忆的错误。我几乎百分之百地确信,由于未正确创建、发送到函数或处理Maximalset和/或compsub向量,我会出现此错误。 请帮我解决这个错误,谢谢你的回答! 更新:修复了Paul Evans指出的问题。现在我时不时地得到异常,但仍然得到它 class Graph { private: int size; // the number of node vector&

我得到cygwin_exception::open_stackdumpfile试图运行我的代码。我想这是一个关于记忆的错误。我几乎百分之百地确信,由于未正确创建、发送到函数或处理Maximalset和/或compsub向量,我会出现此错误。 请帮我解决这个错误,谢谢你的回答! 更新:修复了Paul Evans指出的问题。现在我时不时地得到异常,但仍然得到它

class Graph {
private:
    int size; // the number of node
    vector<vector<bool> > connected;
    vector<vector<int> > bkv2(vector<int> oldSet, int ne, int ce,
        vector<int> &compsub, vector<vector<int> > maximalSets);
public:
    Graph(int size);
    vector<vector<int> > findMaximalSets();
}

Graph::Graph(int n) { 
    int i, j;
    srand((unsigned int) time( NULL));
    size = n;
    connected.resize(size);
    for (int i=0; i<size; i++) {
        connected[i].resize(size);
    }

    for (i = 0; i < size; i++) { // the graph is randomly generated
        connected[i][i] = 1;
        for (j = i + 1; j < size; j++) {
            if (rand() % 2 == 1) {
                connected[i][j] = 1;
                connected[j][i] = 1;
            } else {
                connected[i][j] = 0;
                connected[j][i] = 0;
            }
        }
    }
}

vector<vector<int> > Graph::findMaximalSets() {
    int i;
    vector<int> all(size);
    vector<int> compsub;
    vector<vector<int> > maximalSets;
    for (i = 0; i < size; i++) {
        all[i] = i;
    }
    return bkv2(all, 0, size, compsub, maximalSets);
}
vector<vector<int> > Graph::bkv2(vector<int> oldSet, int ne, int ce,
        vector<int> &compsub, vector<vector<int> > maximalSets) {
    vector<int> newSet(ce);

    int nod, fixp;
    int newne, newce, i, j, count, pos, p, s, sel, minnod;

    minnod = ce;
    nod = 0;
    for (i = 0; i < ce && minnod != 0; i++) {
        p = oldSet[i];
        count = 0;
        for (j = ne; j < ce && count < minnod; j++)
            if (connected[p][oldSet[j]]) {
                count++;
                pos = j;
            }
        if (count < minnod) {
            fixp = p;
            minnod = count;
            if (i < ne) {
                s = pos;
            } else {
                s = i;
                nod = 1;
            }
        }
    }
    for (nod = minnod + nod; nod >= 1; nod--) {
        p = oldSet[s];
        oldSet[s] = oldSet[ne];
        sel = oldSet[ne] = p;
        newne = 0;
        for (i = 0; i < ne; i++) {
            if (!connected[sel][oldSet[i]]) {
                newSet[newne++] = oldSet[i];
            }
        }
        newce = newne;
        for (i = ne + 1; i < ce; i++) {
            if (!connected[sel][oldSet[i]]) {
                newSet[newce++] = oldSet[i];
            }
        }

        compsub.push_back(sel);
        if (newce == 0) {
            vector<int> copy = compsub;
            maximalSets.push_back(copy);

        } else if (newne < newce) {
            maximalSets = bkv2(newSet, newne, newce, compsub, maximalSets);
        }

        compsub.pop_back();

        ne++;
        if (nod > 1) {
            for (s = ne; !connected[fixp][oldSet[s]]; s++) {
            }
        }


    }
    return maximalSets;
}
类图{
私人:
int size;//节点数
向量连通;
向量bkv2(向量oldSet,int-ne,int-ce,
向量&compsub,向量最大集);
公众:
图形(整数大小);
向量findMaximalset();
}
图::图(int n){
int i,j;
srand((无符号整数)时间(NULL));
尺寸=n;
连接。调整大小(大小);
对于(int i=0;i=1;nod--){
p=旧集[s];
oldSet[s]=oldSet[ne];
sel=oldSet[ne]=p;
newne=0;
对于(i=0;i1){
对于(s=ne;!已连接[fixp][oldSet[s]];s++){
}
}
}
返回最大值集;
}

这是因为您没有在任何地方初始化
大小。

好吧,
compsub.向后推(某物)当然不会编译!好吧,我想我会把整个代码都贴出来。你说得对。如何创建compsub内容的副本?将向量复制=compsub;复制引用或它的内容?如果我按值传递它,我将无法在递归函数中返回()它的内容。此外,我想这并不是导致异常的唯一问题,因为在修复之后我仍然可以得到它。我正在构造函数中初始化它。我将把它添加到帖子中