Так что, если я пишу следующий код:Почему вызов MessageBox [etc]() без возвращаемой переменной приводит к сбою программы?
MessageBoxA(0, "Yo, wazzup!", "A Greeting From Earth", 0);
программа вылетает с нарушением доступа, когда он выходит. Когда я пишу код следующим образом:
int a;
a = MessageBoxA(0, "Yo, wazzup!", "A Greeting From Earth", 0);
не падает. Теперь я знаю, почему он сбой , когда он падает из-за другого вопроса, который я задал, также в отношении несоответствия аргументов, но я не знаю , почему сбой.
Так почему же это вызывает APPCRASH? Я всегда был под впечатлением, что вызов функции, которая имела обратный типа, фактически не давая один был безопасен, например:
int SomeFunction (void) {
std::cout << "Hello ya'll!\n";
return 42;
}
int main (void) {
int a;
// "Correct" ?
a = SomeFunction();
a = MessageBoxA(0, "Yo, wazzup!", "A Greeting From Earth", 0);
// "Incorrect" ?
SomeFunction();
MessageBoxA(0, "Yo, wazzup!", "A Greeting From Earth", 0);
}
Когда я запускаю этот вид теста «чистый» (в новом файле) У меня нет ошибок. Это только, кажется, дает ошибку с MessageBox/MessageBoxA при запуске в моей программе. Знание возможных причин поможет мне определить ошибку, поскольку код проекта слишком велик для публикации (и мне все равно понадобится разрешение моего друга на публикацию его кода).
Дополнительная информация:
Компилятор = GCC
Platform = Windows,
EDIT:
Update
Спасибо всем за ваши отзывы до сих пор. Поэтому я решил запустить его через отладчик ... Теперь Code :: Blocks не отлаживает проект, если он не загружен из файла проекта (* .cbp) - AFAIK. Поэтому я создал реальный проект и скопировал основной файл нашего проекта в проекты. Затем я побежал в режиме отладки и не получил столько предупреждений. Затем я скомпилировался в режиме сборки, и он работал нормально.
Далее я решил открыть новый файл в Dev-C++ и запустить его через отладку, а затем и окончательный процесс сборки, и снова у меня нет ошибок для сборки или отладки. Я не могу воспроизвести эту ошибку в Dev-C++, даже с нашим основным файлом (как в том, что вызывает ошибку в Code :: Blocks).
Заключение
Ошибка должна заключаться в Code :: Blocks. AFAIK, они оба используют GCC, поэтому я довольно смущен. Единственное, что я могу придумать, это различие в версии или, возможно, мои настройки компилятора или что-то подобное неявное. Могут ли настройки оптимизатора или любые другие параметры компилятора каким-то образом вызвать такую ошибку?
Только это не должно падать, у вас есть еще одна проблема. Пожалуйста, запустите свою программу в отладчике, это поможет вам определить крушение. –
Если вы не можете дать конкретный репрограммирование, это никогда не было –
Вероятно, это повреждение стека ... Насколько повторяемо? – Pete