Почему места в памяти элементов моего 2D-массива постоянно меняются в C? - PullRequest
1 голос
/ 15 февраля 2020

В других функциях моей программы я читаю данные из файла и затем записываю их в двумерный массив. Этот 2D массив указывается в структуре с использованием члена структуры, который является двойным указателем. Затем я использую этот 2D-массив в новой функции.

В этой функции я пытаюсь открыть новый файл в режиме записи, а затем записать содержимое массива 2d в файл, используя double для l oop. Однако эта часть не работала вообще. Когда я пытался распечатать каждый отдельный элемент, он правильно напечатал бы первый элемент массива. Но после этого каждый второй элемент представлял собой некоторый случайный символ, такой как l, @,?, H, который представлял собой символы, которые совершенно не связаны и никогда не сохранялись в массиве.



    outfile = fopen( "test.txt", "w");
    //error handling


    if(outfile == NULL)
   {
      printf("Error!");   
      exit(1);             
   }
   // printf("\nfirst element %c\n",u->unipointer[4][3]);

    //this aims to print out every element in the 2d array
    for (int i=0; i<u->rows; i++){
        for (int j=0; j<u->cols; j++){
            printf("%c",u->unipointer[i][j]);
        }
    }

    printf("\nfirst element %c\n",u->unipointer[0][0]);
    printf("first element %c\n",u->unipointer[0][0]);




    fclose(outfile);

}

Двойной цикл for не печатается что-нибудь. Когда я печатаю u-> unipointer [0] [0] в первый раз, я получаю '.' который является фактическим значением, которое хранится в 2D массиве. Когда я печатаю его второй раз, точно таким же образом, я получаю «H» по какой-то причине. Это то же самое для любого другого элемента в двумерном массиве, который я пытаюсь распечатать по отдельности.

Когда я распечатываю ячейку памяти этих двух элементов, они различаются. Однако каждый раз, когда я запускаю программу, область памяти в первой строке печати не изменяется, а вторая строка меняется каждый раз.

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