2013-04-08 132 views
2

我试图制作一个程序,将过滤器放在一个bmp文件。我运行它,并获得在Mac GCC总线错误,我获得的Linux机器执行以下操作:C编程总线错误/段错误

104:8:警告:变量“NEW_FILE”设置,但不使用[-Wunused - 丁SET-可变]
159:56:警告: '像素' 可以使用的未初始化在该函数[-Wuninitialized]
185:10:警告: 'bmpOut' 可以在此函数[-Wuninitialized]

可以使用未初始化

当我运行它时,我得到一个错误的核心转储。

有什么你们看到这个错误?我认为这与指针有关。

+7

您是否至少修复了您给出的警告?他们看起来很直接。 – chris 2013-04-08 01:29:47

+0

我试过了。我不确定如何解决这三个问题。当我删除new_file时,我得到一个新的错误。 – RightLeftRight12 2013-04-08 01:30:51

+0

你可以通过调试器来运行它吗? – chrisaycock 2013-04-08 01:30:55

回答

1

104:8:警告:变量“NEW_FILE”设置,但不使用[-Wunused,但设置变量]

这告诉你该变量new_file没有任何影响你的逻辑如此之多。它不必要地使你的代码复杂化;你可能应该删除它。但是,这不会导致你的段错误。这更可能是后两种:

159:56:警告:“像素”可以在这个函数[-Wuninitialized]

这是一个比较严重的问题,可以使用未初始化。在pixel[holdr*Height+holdc]之前,没有什么可以指定像素(一个指针)指向一个对象。在使用pixel[...]之前,您需要确保它指向某个东西!我建议沿着pixel = malloc(count * sizeof *pixel);的方向行事。

185:10:警告:“bmpOut”可以在这个函数中使用未初始化[-Wuninitialized]

再次,这是相当严重的!我认为在写入该文件之前,你会想让tmpOut指向一个文件。我建议沿着tmpOut = fopen("/path/to/filename", "wb");tmpOut = stdout;的方向行事。

你有没有考虑过使用valgrind?

+0

现在我得到一个错误的GDB说程序接收信号:“EXC_BAD_ACCESS为线读取holdRed + =矩阵[pixCounter] * rgb [holdr1 *高度+ holdc1]。红色; – RightLeftRight12 2013-04-08 03:37:21

+0

矩阵可以存储多少项目'print pixCounter '......你在读哪本书? – Sebivor 2013-04-08 03:53:38