【问题标题】:Segmentation Fault - Opening binary file分段错误 - 打开二进制文件
【发布时间】:2013-11-04 15:31:15
【问题描述】:

我是一个编程新手,我需要在第一阶段的程序中显示一个二进制文件。

在我老师的帮助下,我能够做到这一点,但是当我在代码中工作到后期时,我改变了一些我现在无法恢复的东西:(

这是代码:

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

int main()
{
    FILE *f;
    int a = 0, b = 0, c = 0, d = 0;
    float cinzentos = 0, mlinha = 0, ppixeis = 0;
    unsigned char matriz[28][28][500];

    f = fopen("dados1.bin", "rb");

    if (f != NULL) {
        while (!feof(f)) {
            b++;

            if (b == 28) {
                printf(" soma: %f ", mlinha);
                printf(" cizentos: %f ", mlinha / 28);
                printf("\n");
                b = 0;
                a++;
                mlinha = 0;
                printf("%d %d %d", a, b, c);
            }

            if (a == 28) {
                a = 0;
                c++;
                ppixeis = (ppixeis / 28 * 28) * 0.1;
                printf("media de pixeis: %f\n", ppixeis);
                printf("\n---------------\n");
            }

            matriz[a][b][c] = fgetc(f);

            if (matriz[a][b][c] != 0) {
                printf("1");
                mlinha = mlinha + matriz[a][b][c];
                ppixeis++;
                fputc(matriz[a][b][c], p);
            } else {
                printf("0");
            }
        }
    }

    fclose(f);

    return 0;
}

我认为,那是因为文件打开了,但我正在循环尝试将其重新组合在一起,需要帮助

【问题讨论】:

  • 我只能猜测您正在尝试使用大于数组的索引访问matriz。在每次访问它之前,请检查abc,看看它们是否是好的值。
  • 另外,学习并开始使用版本控制系统(如 Git)。如果您经常签入您的代码,然后进行的更改会破坏您的程序,您可以返回到工作版本,甚至执行工作版本和当前损坏版本之间的差异并准确地查看 有什么不同。
  • 另外,虽然 (!feof()) 总是错误的,请参阅stackoverflow.com/questions/5431941/…
  • 使用for (a = 0; a &lt; 28; a++) { for (b = 0; b &lt; 28; b++) { for (c = 0; c &lt; 500; c++) { int v; if ((v = getc(f)) == EOF) { ...break out of input loops on error, or exit... } matriz[a][b][c] = v; } } }会更方便。
  • 这是关于 var c

标签: c file segmentation-fault


【解决方案1】:

看起来你的代码差了一个

while (!feof(f)) {
            b++;

确保 b 在第一个读取字符处不会从 0 开始

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    相关资源
    最近更新 更多