Не знаю, почему я получаю ошибку, обнаруженную Glibc

Это моя функция, которая вызывает ошибку

void copy_bounds_concrete(char* lower, char* upper, struct bounds* results){
   if (DEBUG)
      printf("%d %d \n", strlen(lower), strlen(upper));
   (*results).lowerBound =(char*) malloc(strlen(lower));
   strcpy((*results).lowerBound, lower);

   (*results).upperBound =(char*) malloc(strlen(upper));
   strcpy((*results).upperBound, upper);
}

и это границы структуры:

struct bounds
{
   char* name;
   char* lowerBound;
   char* upperBound;
}

Я не знаю, почему я получил эту ошибку указателя. Я потратил пару часов, чтобы понять, но ничего не получил.

1 ответ

Решение

Вы должны добавить +1 ко всем strlen внутри mallocв противном случае вы не выделяете место для конца строки (strlen возвращает "логическую длину" строки, не включая завершающий NUL, поэтому вы выделяете меньше памяти, чем необходимо, что приводит к этой ошибке).

Кстати, вместо (*result). ты можешь сделать result->

Другие вопросы по тегам