С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
1 / 1 / 0
Регистрация: 13.11.2013
Сообщений: 56

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

30.01.2014, 09:34. Показов 5589. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
есть такой кусок кода:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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

что я делаю не так, подскажите пожалуйста.

Заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2014, 09:34
Ответы с готовыми решениями:

Ошибка: Heap block at modified past requested size of 7c
Добрый день, при нажатие на кнопку Button2 провожу расчеты и занесение данных в ADOTable2 ADOTable2.Insert; ADOTable2.disablecontrols;...

Указатели, Динамическое выделение памяти, Ошибка invalid allocation size
Есть задание: Есть решение: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; void func(int **a,int lines,int...

[Eclipse] Heap size
Для чего может понадобиться включение функции отображения Heap Size в Eclipse?

4
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
30.01.2014, 13:58
Сложно сказать без отладки. Может проблема вообще в mygetline?
Из того, что я вижу вызывает подозрение лишь (в строчке eof= )
стремление аффтора прибавить к указателю sizeof(line_t)*nlines.
Зачем тут sizeof вообще?
1
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
30.01.2014, 14:44
Лучший ответ Сообщение было отмечено Nikita_WR как решение

Решение

В строке 17 убрать sizeof.
1
1 / 1 / 0
Регистрация: 13.11.2013
Сообщений: 56
30.01.2014, 20:32  [ТС]
я подумал, что, если я выделяю блок памяти для четырех указателей:
C
1
2
3
4
typedef char* line_t;
line_t *l = NULL;
const size_t buf_size = 4;
l = (char**) realloc(l, buf_size * sizeof(line_t) + 1);
,то и при каждой записи надо сдвигаться вправо на размер указателя, если честно не понимаю, почему это не так =)
есть какое-то простое объяснение?
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
30.01.2014, 20:47
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

посмотри в отладчике значение 'l' до вызова mygetline и после. А лучше вот примерчик
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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 минуту
В общем и целом ты немного запутался в арифметике указателей.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.01.2014, 20:47
Помогаю со студенческими работами здесь

Максимальный heap size
Сдраствуйте, наткнулся на то что память в андроиде очень ограничена (еще и от девайса к девайсу) и получается что я не могу работать с...

Heap corruption detected after normal block
выкидывает ошибку при попытке освободить память массива, делаю так: char **Items; ... free(Items);


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru