fread,使用 malloc 作为缓冲区

fread, use malloc as buffer

我想使用 malloc 变量作为我在 C 中的 fread 函数的缓冲区。

我使用 fseekftell 来确定输入音频文件“audioSize”的大小:

//Seek the end of the file and then ask for the position
fseek(input, 0L, SEEK_END);
audioSize= ftell(input);

确定输入文件大小后,我使用 malloc 在内存中分配它:

typedef uint8_t BYTE;
BYTE* audio = (BYTE*) malloc(audioSize);

我想使用这个新分配的内存作为我的 fread 函数的缓冲区,但我做不到,每次我 运行 我的程序都没有写入内存。我不确定我的逻辑离解决方案有多远,如果有人能给我指明正确的方向,我将非常感激。

fread(&audio, sizeof(BYTE), audioSize, input);
  • 添加错误检查 - 总是。

  • 使用指针的保存数据,不是指针的地址.

       // fread(&audio, sizeof(BYTE), audioSize, input);
       fread(audio, sizeof(BYTE), audioSize, input);
    
  • 再次阅读前请务必倒带。

  • 二进制读取


FILE *inpout = fopen(fileanme, "rb");
if (input == NULL) Handle_Error();
if (fseek(input, 0, SEEK_END)) Handle_Error();
long audioSize = ftell(input);
if (audioSize == -1 || (unsigned long) audioSize > SIZE_MAX) Handle_Error();

unint8_t* audio = malloc((size_t) audioSize);     
if (audio == NULL) Handle_Error();

rewind(input);
size_t size_read = fread(audio, sizeof *audio, (size_t) audioSize, input);
fclose(input);
if (size_read != (size_t) audioSize) Handle_Error();

.... // Use audio

free(audio);