从动态分配的2D数组中获取价值

时间:2018-04-15 16:08:46

标签: c pointers graph-theory dynamic-allocation

我是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方法中出现故障。

1 个答案:

答案 0 :(得分:0)

您正在使用num_rows来存储大于int capacity的数字。

因为溢出,实际值int num_rows不是69000000。

尝试改为使用long unsigned int num_rows