以下代码片段会导致 MAXV 大值出现内存错误。如何定义这个结构,以便将其用于边缘和度数中的许多值?
#define MAXV 1441295
typedef struct {
edgenode *edges[MAXV+1];
int degree[MAXV+1];
int nvertices;
int nedges;
int directed;
} graph;
initialize_graph(graph *g, bool directed)
{
int i;
g -> nvertices = 0;
g -> nedges = 0;
g -> directed = directed;
for (i=1; i<=MAXV; i++) g->degree[i] = 0;
for (i=1; i<=MAXV; i++) g->edges[i] = NULL;
}
最佳答案
从我的 Crystal 球中看到,我看到您正在创建 graph
类型的局部变量。这些局部变量中的每一个都超过 10,000,000 字节大,这会溢出系统中的可用堆栈空间。
尝试将对象创建为静态对象或堆分配对象。
也就是说,不要这样做:
int f(graph g) {
graph newg = g;
}
相反,这样做:
graph g;
int f() {
g.ediges[g.nedges++] = 0;
}
或者这个:
int f(graph *pg) {
pg->edges[17] = 0;
}
关于C 结构中的内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9608000/