C - `0` специальный символ появляется с помощью malloc - PullRequest
0 голосов
/ 20 сентября 2018

У меня проблемы с использованием malloc во время конкатенации.Кажется, когда я неправильно размещаю свой указатель, автоматически добавляется символ.Это добавление после многих циклов, которые уже работали, я использую malloc на нулевом указателе, настроенном на 2 строки раньше, я использую только число, для которого существует, cur_len, sub_len.

Это кажется нормальным, думает,но в этот момент этот специальный символ автоматически появляется.На самом деле, кажется, что (для меня) он отображается как один символ при печати (см. Рисунок 2), но когда я проверяю значение new_str через lldb, '0' (с цитатой) состоит из трех символов ...

lldb representation Когда печатается символ: enter image description here

Если кто-то может дать мне подсказку, он попробовал некоторые вещи, не в состоянии понять длямоментБлагодаря вам, я надеюсь, что все ясно.

Редактировать:
Моя ошибка -> Я не перезаписывал указатель, возвращенный malloc из первого индекса, и потому что mallocможет дать некоторую память, которая не является "чистой", в пуле памяти вы должны (должны?) перезаписать новый указатель из индекса 0. (На самом деле я думаю, что нет смысла не делать этого.)

1 Ответ

0 голосов
/ 20 сентября 2018

malloc() не инициализирует выделенное вами пространство памяти, оно часто содержит мусор из того, для чего это пространство памяти использовалось ранее.

Если вы хотите убедиться, что выделенная вами память заполнена нулями,используйте calloc() вместо этого.Уведомление calloc() принимает различные параметры .

...