Выделение памяти и ошибка Heap block at 00B515A0 modified at 00B515B9 past requested size of 11 - C (СИ)
Формулировка задачи:
Доброго времени суток!
есть такой кусок кода:
после чтения 4 строк я увеличиваю размер выделенной памяти через realloc, тут и возникает ошибка:
Heap block at 00B515A0 modified at 00B515B9 past requested size of 11
что я делаю не так, подскажите пожалуйста.
Заранее спасибо!
size_t read_lines(char ***lines)
{
typedef char* line_t;
line_t *l = NULL;
*lines = NULL;
size_t nlines = 0;
const size_t buf_size = 4;
size_t buf_count = 0;
l = (char**) realloc(l, buf_size * sizeof(line_t) + 1);
bool eof = false;
size_t i = 0;
while (!eof)
{
for (i = 0; i < buf_size && !eof; ++i)
{
eof = mygetline(l + sizeof(line_t) * nlines++); // после выполнения функции
//переданный в нее указатель
//указывает на начало считанной строки
}
if (!eof)
{
l = (char**) realloc(l, (buf_size + nlines) * sizeof(line_t)); // здесь вылазит ошибка
}
else{
l = (char**) realloc(l, buf_count * buf_size - nlines);
}
}
*lines = l;
return nlines;
}Решение задачи: «Выделение памяти и ошибка Heap block at 00B515A0 modified at 00B515B9 past requested size of 11»
textual
Листинг программы
#include <stdio.h>
void fake_pointer_change(int * p)
{
p = NULL;
printf("%p\n", p);
}
int main()
{
int x;
int *p = &x;
printf("%p\n", p);
fake_pointer_change(p);
printf("%p\n", p);
return (0);
}
Объяснение кода листинга программы
- Включаем заголовочный файл stdio.h для использования функций вывода
- Создаем функцию fake_pointer_change которая принимает указатель на int и ничего не делает с ним
- В функции main создаем переменную x типа int и указатель p на эту переменную
- Выводим адрес p на экран
- Вызываем функцию fake_pointer_change передавая ей указатель p
- Выводим адрес p на экран
- Возвращаем 0, чтобы указать, что программа успешно завершилась