这些代码不起作用! 它必须读取512字节的块直到文件结束!
*错误在./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;
}
答案 0 :(得分:3)
您将B_SIZE * 128
(512 * 128 = 64k)字节读入仅512字节的缓冲区。这将写出已分配内存的界限,并导致未定义的行为。
如果您想一次只读取512个字节,那么请执行此操作。
fread(data, 1, B_SIZE, file);