Инкрементная переменная меняет мой указатель на значения массива указателей - PullRequest
0 голосов
/ 27 марта 2019

Попытка создать таблицу из документа, отформатированного как таблица, но значение, хранящееся в таблице, изменяется после i ++, почему?

int i, c, j=0;
int **vtab;

// C and L stands for columns ans lines

/* allocate memory for int value table   */
    vtab = (int **) malloc( L * sizeof( int *));
    for ( i=0; i<L; i++)
    {
        vtab[i]= (int *) malloc( C * sizeof( int ));
    }


do {
  c = (fgetc(fp) - 10); /* This function returns the character read as an unsigned char cast to an int or EOF on end of file or error. */
  if( feof(fp) ) {
     break ;
  }
  printf("%c", c);
  if (c != 32){
    if ( j>C ){
        j=0;
        i++;
    }
    vtab[i][j] = c;
    ++j;
  }
} while(1);

1 Ответ

1 голос
/ 27 марта 2019

i начинается с неопределенного случайного значения, поэтому поведение: undefined .

Обратите внимание, что int i, j=0; не инициализирует i - он только инициализирует j.

Помимо этого, vtab объявляется как указатель на указатель на int, но он никогда не указывается нигде, поэтому он также указывает на случайный адрес памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...