Выделение памяти и ошибка Heap block at 00B515A0 modified at 00B515B9 past requested size of 11 - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! есть такой кусок кода:
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;
}
после чтения 4 строк я увеличиваю размер выделенной памяти через realloc, тут и возникает ошибка: Heap block at 00B515A0 modified at 00B515B9 past requested size of 11 что я делаю не так, подскажите пожалуйста. Заранее спасибо!

Решение задачи: «Выделение памяти и ошибка 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);
}

Объяснение кода листинга программы

  1. Включаем заголовочный файл stdio.h для использования функций вывода
  2. Создаем функцию fake_pointer_change которая принимает указатель на int и ничего не делает с ним
  3. В функции main создаем переменную x типа int и указатель p на эту переменную
  4. Выводим адрес p на экран
  5. Вызываем функцию fake_pointer_change передавая ей указатель p
  6. Выводим адрес p на экран
  7. Возвращаем 0, чтобы указать, что программа успешно завершилась

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5
Похожие ответы