Выделение памяти и ошибка 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, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д