Файл: при работе с динамической памятью возникает ошибка: "Cannot find bounds of current function" - C (СИ)
Формулировка задачи:
Хочу считать из файла строку(до точки), выделять под неё память кусками по 50, потом её вывести.
При компиляции ошибок нет, предупреждений тоже. При работе вылет + выводит вначале какую-то случайную белиберду.
При отладке пропадает на free, и далее пишет "не могу найти края функции"(Cannot find bounds of current function). Если убрать цикл - всё равно. Если убрать free, то вообще выходит за край мэйна и пишет то же.
Что я делаю не так?
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <strings.h>
- #include <malloc.h>
- FILE *f;
- char* buff=NULL;
- char* s=NULL;
- int main()
- {
- printf("Hello world!\n");
- f =fopen("TextFile.txt","r");
- buff=malloc(0);
- s=malloc(50);
- //цикл:
- /*while (1==fscanf(f, "%50[^.]",s))
- {
- realloc(buff, sizeof(buff)+50);
- strcat(buff, s);
- }*/
- //без цикла
- fscanf(f, "%50[^.]",s);
- realloc(buff, sizeof(buff)+50);
- strcat(buff, s);
- printf("%s",buff);
- free(s);
- free(buff);
- fclose(f);
- return 0;
- }
Решение задачи: «Файл: при работе с динамической памятью возникает ошибка: "Cannot find bounds of current function"»
textual
Листинг программы
- buff=malloc(0);
- // ...
- realloc(buff, sizeof(buff)+50);
Объяснение кода листинга программы
buff
- это переменная типа void*, которая указывает на блок памяти, выделенный динамически. Значение переменнойbuff
не определено.0
- это значение, которое передается в функциюmalloc
в качестве первого аргумента. Эта функция выделяет блок памяти размером в 0 байт.sizeof(buff)
- это значение, которое передается в функциюrealloc
в качестве второго аргумента. Оно определяет новый размер блока памяти, который должен быть выделен.50
- это значение, которое добавляется к размеру блока памяти, выделенного функциейmalloc
. Это делается для того, чтобы выделить достаточно места для данных.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д