Изменения переменных после увеличения размера 2D-массива - PullRequest
2 голосов
/ 07 апреля 2019

Слово записывается в 0-ую строку и столбец двумерного массива.Когда я иду, чтобы изменить размер массива, чтобы подготовиться к сохранению другого слова, я сохраняю слово в 0-й строке и столбце во временной переменной.После того, как я вызываю функцию, которая увеличивает размер двумерного массива, переменная temp меняется на что-то очень странное.Например, я передал 'i', и после того, как я увеличил размер строк, переменная temp, которая хранила i, изменится.Почему это происходит?

void make_row_decode_structure_bigger(int rows){
    printf("inside the making the rows bigger \n");
    int max_rows = rows+1;

    char **store = realloc( decode_structure, sizeof *decode_structure * (rows + 2) );
    printf("after a store has been assigned\n");    
    if (store){ 
        decode_structure = store;
        for(size_t i = 0; i < 2; i++ ){

            decode_structure[rows + i] = calloc(20, sizeof(char));
        }
    }
    printf("end of making the rows increase\n");
    return;
    //decode_structure[max_rows][0] = '\0';
}

//other part of code
char* temp;
        strncpy(temp, decode_structure[0], 20);
        printf("this word %s is at the top of decode_structure\n", temp);
        printf("make the rows bigger is being called\n");
        make_row_decode_structure_bigger(num);
        printf("temp after make_row_decode_structure_biggeris called %s \n", temp);

это вывод:

это слово, которое я на вершине decode_structure, делает строки больше, вызывается внутри, делая строки больше после магазинабыл назначен конец создания строк, увеличивающий временную температуру после make_row_decode_structure_bigger, называемого Ó «

1 Ответ

2 голосов
/ 07 апреля 2019

Здесь:

char* temp;
strncpy(temp, decode_structure[0], 20);

вы используете в качестве места назначения копии неинициализированный указатель, который вызывает неопределенное поведение (UB).

Используйте взамен char temp[20];, или еслиВы действительно хотите указатель, затем используйте malloc для динамического выделения памяти, которая будет указана указателем, например: char* temp = malloc(sizeof(char) * 20);.

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