C程序的运行时错误

时间:2014-02-25 01:37:07

标签: c segmentation-fault converter

我在互联网上找到了这个程序所以我决定尝试它,它将文件转换为另一种类型的文件。我通过终端编译并运行我的MAC OS X 10.9.1,但它给了我一个分段错误11.我该怎么做才能解决这个问题?

#include <stdio.h>

#define SRAM_SIZE       (32 * 1024)

typedef FILE* pfile;

static unsigned char SRAM[SRAM_SIZE];

int main(void)
{
    pfile in, out;
    register int i;

    in = fopen("input.sra", "rb");
    for (i = 0; i < SRAM_SIZE; i++)
        SRAM[i ^ ~0&3] = fgetc(in);
    fclose(in);
    out = fopen("output.sra", "wb");
    for (i = 0; i < SRAM_SIZE; i++)
        fputc(SRAM[i], out);
    fclose(out);
    return 0;
}

1 个答案:

答案 0 :(得分:2)

您没有错误检查。变化:

in = fopen("input.sra", "rb");
for (i = 0; i < SRAM_SIZE; i++)
    SRAM[i ^ ~0&3] = fgetc(in);
fclose(in);
...

为:

in = fopen("input.sra", "rb");
if (in == NULL)
{
    printf("Unable to open 'input.sra'.\n");
    return -1;
}
for (i = 0; i < SRAM_SIZE; i++)
    SRAM[i ^ ~0&3] = fgetc(in);
fclose(in);
...

您也应该对输出文件执行相同的操作。有很多方法可能会失败,只是盲目地访问未经测试的值是不好的做法。