我是C编程的新手,所以我可能在这里做了一些非常愚蠢的事情。我试图从我从一个文本文件~70m行读入的2D数组中获取值。
运行代码时,我得到了一个seg错误,我把它缩小到第10行:if(i == graph [j] [0])
void convertToCSR(int source, int maxNodes, int maxEdges, int* vertices, int* edges, int** graph) {
int i;
int j;
int edge = 0;
for (i = 0; i < maxNodes; i++) {
vertices[i] = edge;
for (j = 0; j < maxEdges; j++) {
if (i == graph[j][0]) {
//Sets edges[0] to the first position
edges[edge] = graph[j][1];
printf("new edge value: %d\n", edge);
edge++;
}
}
}
vertices[maxNodes] = maxEdges;}
我用较小的数据集(例如50个字节)尝试了这个,它工作正常。通过进一步的测试,我打印出graph [0] [0]的值,我得到一个seg错误。
图表已加载数据,并按如下方式分配:
int num_rows = 69000000;
graph = (int**) malloc(sizeof(int*) * num_rows);
for(i=0; i < num_rows; i++){
graph[i] = (int*) malloc(sizeof(int) * 2 );
}
我也可以在此方法之外获取graph [0] [0]的值,但不能在内部。我做错了什么?我感谢任何帮助。
编辑:在我的主要方法中,我正在做以下事情:
readInputFile(file);
int source = graph[0][0];
convertToCSR(source, maxNodes, maxEdges, nodes, edges, graph);
我有变量的正确值:source。 它在convertToCSR方法中出现故障。
答案 0 :(得分:0)
您正在使用num_rows
来存储大于int capacity的数字。
因为溢出,实际值int num_rows不是69000000。
尝试改为使用long unsigned int num_rows
。