从文件C中读取int **

时间:2016-06-06 14:13:15

标签: c

我必须在C中读取文件并创建int**

这是文件:

2
-1,1,1,0,0,1
1,-1,0,1,0

我这样做:

FILE *fp = fopen("grafo.txt", "r");
char line[100];
int numLinea = 0;
char** tokens;

while (1) {
    if (fgets(line,150, fp) == NULL) break;
    if(numLinea == 0){
        NUMERO_NODOS = atoi( line );
        nodos = (int **)malloc (NUMERO_NODOS*sizeof(int *));
    }else{
        tokens = str_split(line, ',');
        if (tokens) {
            for (int i = 0; *(tokens + i); i++) {
                char* contactoNodo;
                strcpy(contactoNodo, *(tokens + i));
                int numNodo = numLinea-1;
                nodos[numNodo] = (int *) malloc (NUMERO_NODOS*sizeof(int));
                nodos[numNodo][i] = atoi(contactoNodo);
                printf("nodos[%i][%i] = %i\n",numNodo,i,nodos[numNodo][i]);
                printf("nodos[0][0] = %i\n",nodos[0][0]);
                //free(contactoNodo);
            }
            printf("nodos[0][0] = %i\n",nodos[0][0]);
            //free(tokens);
        }
    }
    numLinea++;
    //printf("%3d: %s", i, line);
}

这是输出:

nodos[0][0] = -1
nodos[0][0] = -1
nodos[0][1] = 1
nodos[0][0] = -1163005939
(...)

为什么在{for循环的第二次迭代中nodos[0][0] = -1163005939

LOL,就是这样:

if(i==0){
      nodos[numNodo] = (int *) malloc (NUMERO_NODOS*sizeof(int));
}

我无法相信我没有看到它。谢谢MikeCAT !!!

1 个答案:

答案 0 :(得分:0)

致命错误:

  • 您使用具有自动存储持续时间的未初始化变量contactoNodo的值来调用未定义行为
  • 通过分配新缓冲区并将指针覆盖到旧缓冲区,丢弃了第一次迭代中读取的内容,并通过读取{{1}分配的缓冲区内容再次调用未定义行为并且没有初始化。

警告:

试试这个:

fgets()