gpt4 book ai didi

c - *** 错误 `./recover' : free(): invalid next size (normal)

转载 作者:行者123 更新时间:2023-11-30 18:37:15 26 4
gpt4 key购买 nike

这些代码不起作用!它必须读取 512 字节 block 直到文件结束!

  • valgrind 说一切都好!
  • 分配的数据最终会释放

* `./recover' 中的错误:free():下一个大小无效(正常):0x09e89170 *中止(核心转储)

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

#define B_SIZE 512

char* getTitle (int c);

int main(int argc, char* argv[])
{
// TODO

long size;
uint32_t *data;

// open file

FILE* file = fopen("card.raw", "r");

if (!file) {
fprintf(stderr, "Unable to open/create file\n");
return 1;
}

fseek(file, 0, SEEK_END);
size = ftell(file);
fseek(file, 0, SEEK_SET);


if (!(data = malloc(512))) {
fprintf(stderr, "Failed to allocate memory\n");
return 1;
}

while(true) // until end
{
// read 512 block
if (ftell(file) >= size-2048)
{
printf("STOP\n");
break;
}

fread(data, B_SIZE, 128, file);

printf("%ld, (%li)\n", ftell(file), size);

}

// close all files
free(data);
fclose(file);
return 0;
}

最佳答案

您将 B_SIZE * 128(512 * 128 = 64k) 字节读入只有 512 字节的缓冲区中。这将超出已分配内存的范围并导致未定义的行为

如果您只想一次读取 512 个字节,则执行例如

fread(data, 1, B_SIZE, file);

关于c - *** 错误 `./recover' : free(): invalid next size (normal),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37907986/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com