Файл: при работе с динамической памятью возникает ошибка: "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);

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

  1. buff - это переменная типа void*, которая указывает на блок памяти, выделенный динамически. Значение переменной buff не определено.
  2. 0 - это значение, которое передается в функцию malloc в качестве первого аргумента. Эта функция выделяет блок памяти размером в 0 байт.
  3. sizeof(buff) - это значение, которое передается в функцию realloc в качестве второго аргумента. Оно определяет новый размер блока памяти, который должен быть выделен.
  4. 50 - это значение, которое добавляется к размеру блока памяти, выделенного функцией malloc. Это делается для того, чтобы выделить достаточно места для данных.

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

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