2013-04-08 3 views
2

Im пытается создать программу, которая помещает фильтр в файл BMP. Я бегу это и получаю ошибку шины на макинтош НКУ, и я получаю следующее на Linux машине:C программирование Ошибка шины/ошибка Seg

104: 8: предупреждение: переменная «new_file» установлен, но не используется [-Wunused-но-комплект- переменная]
159: 56: предупреждение: 'пиксел' может быть использовано неинициализированным в этой функции [-Wuninitialized]
185: 10: предупреждение: 'bmpOut' может быть использовано неинициализированным в этой функции [-Wuninitialized]

Когда я запускаю его, я получаю ошибку набора Core Dump.

Есть ли что-нибудь, что вы, ребята, ошибаетесь в этом? Я думаю, что это связано с указателями.

+7

Вы хотя бы исправили предупреждения, которые вам так приятно дали? Они кажутся довольно простыми. – chris

+0

Ive пытался. Я не знаю, как исправить эти последние три. Когда я удаляю new_file, я получаю новую ошибку. – RightLeftRight12

+0

Есть ли вероятность, что вы можете запустить это через отладчик? – chrisaycock

ответ

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 * Height + holdc1] .Red; – RightLeftRight12

+0

Сколько элементов может хранить Matrix? 'Print pixCounter '... В какой книге вы читаете? – Sebivor