使用常量初始化变量时出现分段错误

时间:2013-11-01 09:42:51

标签: c segmentation-fault

我遇到了一个奇怪的分段错误。为了调试我改写了我的代码,以便某些值是常量,但分段错误仍然存​​在。在这一点上,我不知道是什么原因导致了这个错误。

Program terminated with signal 11, Segmentation fault.
#0  findMaxFlowInSTNetwork (graph=0xbfb74076, adj=0xbfaaccf4, source=1, target=2, 
    maxValue=2) at invariants/connectivity/multi_connectivity.c:36
36      int order = 4;
(gdb) print order
Cannot access memory at address 0xbbd980c4

我从来没有像这样的分段错误。有没有人知道可能导致这种情况的原因以及如何解决这个问题?

编辑:

以下是该功能的代码:

//returns the minimum of the maxflow of the st-network and maxValue
int findMaxFlowInSTNetwork(GRAPH graph, ADJACENCY adj, int source, int target, int maxValue){
    int order = 4;
    //int order = graph[0][0];
    int paths[(MAXN+1)*(MAXN+1)] = {0};
    int pathCount = 0;
    boolean currentPath[MAXN+1] = {0};
    while(findPath(graph, adj, source, target, paths, order, currentPath) && pathCount < maxValue){
        pathCount++;
    }
    return pathCount;
 }

评论中的行是原始行。由于这给出了分段错误,我将其替换为int order = 4;行。我把这个函数称为:

minimumCutSize = minDegree;
for (i = 1; i <= graph[0][0]; i++){
    if(i!=vertexMinDegree){
        minimumCutSize = findMaxFlowInSTNetwork(graph, adj, vertexMinDegree, i, minimumCutSize);
    }
}

1 个答案:

答案 0 :(得分:0)

进程的堆栈通常在一位数兆字节范围内,并且MAXN设置为4000,您将拥有一个超过60 MB的数组(paths)!绝对是堆栈溢出的情况!

调整大小(相当多)或动态分配堆。