Последние несколько дней я работал над заданием для своего класса C и столкнулся с любопытным сбоем, связанным с функцией realloc () в C. Даже программисты на C / C ++ не могли ответить мне сразучто может быть не так с моим кодом.
Сначала я создаю блок памяти в одной функции:
char *line = (char *)malloc( sizeof(char) * BUFSIZE);
Затем я вызываю getMoreBuf(start_of_block, end_of_block)
int getMoreBuf(char *start, char *end)
{
char *newBuf = 0;
int newSize = (end - start) + BUFSIZE;
newBuf = (char *)realloc(start, sizeof(char) * newSize);
if(NULL == newBuf) {
printf("No virtual RAM available");
}else{
start = newBuf;
}
return newSize;
}
В зависимости отто, что я установил для BUFSIZE, он вылетает после 5-го вызова (BUFSIZE = 1) или 3-го вызова (BUFSIZE = 5) и заменяет прочитанные символы на бессмысленные.
Может кто-нибудь указать мне на мою ошибку (s) и дать предложения, где почитать, чтобы исправить их?Любая помощь приветствуется.:)
Бонусный вопрос: Я выделяю блок памяти с указателем 1, указывающим на начальную, а затем указатель 2 на точку 2 на один блок в блоке памяти.Я realloc () блок и блок перемещается из-за проблем с размером, указатель 2 по-прежнему указывает на старый (теперь бесполезный) блок или он «перемещается» с realloc на новую позицию блока памяти?
(Также на будущее, должен ли я поставить этот дополнительный вопрос в новый вопрос или я могу оставить его здесь, поскольку он тесно связан с первым вопросом?)
Спасибо всемдля вашего вклада, мне очень помогло выяснить, что пошло не так.Если бы я мог, я бы пометил каждого как правильный ответ, так как каждый помог мне в некоторой форме понять немного больше обо всем этом бизнесе проклятых указателей.=)