2015-05-06 2 views
1

Имея эти функцииWinAPI крах программы FillConsoleOutputAttribute

void setPixel(SHORT x, SHORT y, WORD color) { 
    COORD pos = {x, y}; 
    LPDWORD out; 
    FillConsoleOutputAttribute(console,color,1,pos,out); 
} 

void setScreenSize(SHORT x, SHORT y) { 
    COORD size = {x, y}; 
    SetConsoleScreenBufferSize(console,size); 
} 

Я получаю сообщение об ошибке при попытке вызова setPixel() после screenSize():

int main() { 
    HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE); 
    setScreenSize(120,40); // works well if setPixel is not called after 
    setPixel(40,12,GREEN); // works well if setScreenSize is not called 
} 

Программы выше аварий. Я не могу позвонить GetLastError() после FillConsoleOutputAttribute(), который, как представляется, вызывает ошибку и сразу же запускает программу. Я ничего не нашел в the reference.

Что может вызвать сбой программы и как ее решить?

+0

Включите предупреждения компилятора. Особенно предупреждение «использование неинициализированной переменной». –

+0

А, я получаю вашу мысль! «Out» является унифицированным: я использовал «DWORD out» и предоставил его адрес последнему параметру, и он отлично работает. Благодарю. Может быть, ответ. –

ответ

0

Ваша setPixel функция должна быть такой:

void setPixel(SHORT x, SHORT y, WORD color) { 
    COORD pos = {x, y}; 
    DWORD out; 
    FillConsoleOutputAttribute(console,color,1,pos, &out); 
} 

В вашей версии вы передаете неинициализированный указатель, то есть out, чтобы FillConsoleOutputAttribute.

Смежные вопросы