Reallo c возвращает неверный указатель при передаче массива char в другую функцию - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть короткий фрагмент, где я передаю массив символов в другую функцию и изменяю размер в памяти.

// in main
char *str = argv[1];
find(&str);

void func(char **str){
  // some code
  *str = realloc(*str, 10+1);
}

Это выдает ошибку

realloc(): invalid pointer
Aborted (core dumped)

Что я здесь не так сделал? Чтобы изменить значение str в другой функции, я использую двойной указатель.

1 Ответ

3 голосов
/ 20 февраля 2020

Что я здесь сделал не так?

*str в realloc(*str, 10+1) не было выделено этим процессом. @ Barmar

Ваш код мог использовать приведенное ниже или эквивалентное для выделения своей собственной копии, чтобы впоследствии перераспределить ее. Поскольку strdup() отсутствует в C STL на C17, пример реализации .

char *str = strdup(argv[1]);
...