给数组索引赋值返回SIGSEGV;分段故障。 | C

我在下面的代码的第28行上遇到了分段错误。注意:程序尚未完成。

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

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

// get data
FILE* raw = fopen("card.raw", "r");
int rawLength = 0;
while(fgetc(raw) != EOF){
    rawLength++;
}


char dat[rawLength + 1];
fread(dat, 1, rawLength + 1, raw);

// separate data into blocks
int data[sizeof(dat) / 512][512];

data[0][0] = atoi(&dat[0]); // <----------- this is line 28 where the error is happening.

for(int i = 0; i < sizeof(data) / 4; i += 512)
{
    for(int j = 0; j < 512; j++)
    {
        data[i][j] = atoi(&dat[i + j]);
    }
}
}

该代码应打开一个名为“ card.raw”的原始文件,并读取其内容和大小。然后会使用官方的jpeg标头检查文件中的jpeg:“ 0xff 0xd8 0xff [从0xe0到0xef的内容]”。现在这就是它的全部操作,但是当我完成后,它应该将找到的每个jpeg保存在一个新文件中。基本上,这是一个jpeg恢复系统,因为您的设备的垃圾箱文件夹与此类似。我要问的是你找出错误了;如果您现在不能,则不需要编写整个恢复程序。谢谢您的帮助! :)

评论