Я то и дело работал над заданием для моего класса 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) и заменяет прочитанные символы ерундой.
Может ли кто-нибудь указать мне на мою ошибку (ошибки) и дать предложения, где можно прочитать, чтобы исправить их? Любая помощь приветствуется. :)
Дополнительный вопрос: я выделяю блок памяти с указателем 1, указывающим на начало, а затем с указателем 2, указывающим на один блок в блоке памяти. Я realloc() блок, и блок перемещается из-за проблем с размером, указывает ли указатель 2 на старый (теперь бесполезный) блок или он «перемещается» с помощью realloc в новую позицию блока памяти?
(Кроме того, на будущее, должен ли я поместить этот дополнительный вопрос в новый вопрос или я могу оставить его здесь, поскольку он тесно связан с первым вопросом?)
Спасибо всем за ваш вклад, это очень помогло мне понять, что пошло не так. Если бы я мог, я бы отметил каждый как правильный ответ, поскольку каждый из них помог мне в той или иной форме понять немного больше обо всем этом чертовом бизнесе с указателями. =)