Слово записывается в 0-ю строку и столбец двумерного массива. Когда я изменяю размер массива, чтобы подготовиться к сохранению другого слова, я сохраняю слово в 0-й строке и столбце во временной переменной. После того, как я вызываю функцию, которая увеличивает размер 2D-массива, переменная 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);
это вывод:
это слово i находится вверху decode_structure сделать строки больше вызывается внутри делая ряды больше после того, как магазин был назначен конец увеличения строк temp после make_row_decode_structure_bigger вызывается Ó«
Здесь:
char* temp;
strncpy(temp, decode_structure[0], 20);
вы используете в качестве места назначения копии неинициализированный указатель, который вызывает неопределенное поведение (UB).
Вместо этого используйте char temp[20];
, или, если вам действительно нужен указатель, используйте malloc для динамического выделения памяти, на которую будет указывать указатель, например: char* temp = malloc(sizeof(char) * 20);
.
В
char* temp; strncpy(temp, decode_structure[0], 20);
temp
не инициализирован, поэтому это поведение undefined. Он использует некоторую случайную память, которая либо стирается, либо стирается что-то еще.