Thread: Crashing on prog quit

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Carnivore ('-'v) Hunter2's Avatar
    Join Date
    May 2002
    Posts
    2,879

    Crashing on prog quit

    Hey guys! I'm currently learning DirectX (DirectDraw to be specific), in order to recode my game (you can check out the GDI version in my sig). But this simple prog keeps giving me an illegal operation whenever I close it! No idea what's wrong, except that my init/shutdown code was working fine before... Well, this is the relevant code:
    PHP Code:
    #include <ddraw.h>
    #include "main.h" //function prototypes

    #define WINDOW_CAPTION "DirectX Pixelz"
    #define WINDOW_WIDTH 640
    #define WINDOW_HEIGHT 480
    #define WINDOW_POS_X 0
    #define WINDOW_POS_Y 0

    #define SCREEN_WIDTH 640
    #define SCREEN_HEIGHT 480

    HWND hWnd;
    bool done;
    LPDIRECTDRAW ddraw;
    LPDIRECTDRAWSURFACE surfacePrimarysurfaceSecondary;
    unsigned charvideoBuffer;
    DDSURFACEDESC desc = {0};
    DDSCAPS ddscaps;
    int xy;

    void registerWindowClass()
    {
        
    WNDCLASSEX wc = {0};

        
    wc.cbSize sizeof(wc);
        
    wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
        
    wc.hCursor LoadCursor(NULLIDC_ARROW);
        
    wc.hInstance GetModuleHandle(NULL);
        
    wc.lpfnWndProc WndProc;
        
    wc.lpszClassName "WndClass";
        
        
    RegisterClassEx(&wc);
    }

    int WINAPI WinMain(HINSTANCE hInstHINSTANCE hPrevInstLPSTR cmdint showCmd)
    {
        
    srand((unsigned int)GetTickCount());
        
    registerWindowClass();

        
    hWnd CreateWindowEx(0"WndClass"WINDOW_CAPTIONWS_POPUPWINDOW_POS_XWINDOW_POS_YWINDOW_WIDTHWINDOW_HEIGHTNULLNULLhInstNULL);
        
    ShowWindow(hWndSW_SHOW);

        if(!
    gameInit())
            return 
    1;

        
    MSG msg;
        while(!
    done)
        {
            while(
    PeekMessage(&msgNULL00PM_REMOVE))
            {
                
    TranslateMessage(&msg);
                
    DispatchMessage(&msg);
            }

            
    gameMain();
        }

        
    gameShutdown();

        return 
    0;
    }

    LRESULT CALLBACK WndProc(HWND hWndUINT msgWPARAM wParamLPARAM lParam)
    {
        switch(
    msg)
        {
        case 
    WM_CLOSE:
            
    done true;
            
    DestroyWindow(hWnd);
            return 
    0;

        case 
    WM_KEYDOWN:
            switch((int)
    wParam)
            {
            case 
    'Q':
                
    done true;
                
    DestroyWindow(hWnd);
                break;
            }
            return 
    0;
        }

        return 
    DefWindowProc(hWndmsgwParamlParam);
    }

    bool gameInit()
    {
        
    desc.dwSize sizeof(desc);
        
    desc.dwFlags DDSD_CAPS DDSD_BACKBUFFERCOUNT;
        
    desc.dwBackBufferCount 1;
        
    desc.ddsCaps.dwCaps DDSCAPS_PRIMARYSURFACE |
            
    DDSCAPS_FLIP DDSCAPS_COMPLEX;

        if(
    DirectDrawCreate(NULL, &ddrawNULL) != DD_OK)
            return 
    false;

        if(
    ddraw->SetCooperativeLevel(hWndDDSCL_EXCLUSIVE DDSCL_FULLSCREEN DDSCL_ALLOWMODEX DDSCL_ALLOWREBOOT) != DD_OK)
            return 
    false;

        if(
    ddraw->SetDisplayMode(SCREEN_WIDTHSCREEN_HEIGHT8) != DD_OK)
            return 
    false;

        if(
    ddraw->CreateSurface(&desc, &surfacePrimaryNULL) != DD_OK)
            return 
    false;

        
    ddscaps.dwCaps DDSCAPS_BACKBUFFER;

        if(
    surfacePrimary->GetAttachedSurface(&ddscaps, &surfaceSecondary) != DD_OK)
            return 
    false;

        return 
    true;
    }

    void gameMain()
    {
        
    memset(&desc0sizeof(desc));
        
    desc.dwSize sizeof(desc);
        
    surfaceSecondary->Lock(NULL, &descDDLOCK_SURFACEMEMORYPTR DDLOCK_WAITNULL);
        
    videoBuffer = (unsigned char*)desc.lpSurface;
        
        if(
    desc.lPitch == SCREEN_WIDTH)
            
    memset(videoBuffer,0,SCREEN_WIDTH*SCREEN_HEIGHT);
        else
        {
            
    unsigned charasdf videoBuffer;

            for(
    int i 0SCREEN_HEIGHT; ++i)
            {
                
    memset(asdf0SCREEN_WIDTH);
                
    asdf += desc.lPitch;
            }
        }
        

        for(
    int i 01000; ++i)
        {
            
    rand() % SCREEN_WIDTH;
            
    rand() % SCREEN_HEIGHT;
            
            
    videoBuffer[+ (* (desc.lPitch))] = rand() % 256;
        }
        
        
    surfaceSecondary->Unlock(videoBuffer);
        while(
    surfacePrimary->Flip(NULLDDFLIP_WAIT) != DD_OK && (!done));
    }

    void gameShutdown()
    {
        if(
    surfaceSecondary != NULL)
            
    surfaceSecondary->Release();
        if(
    surfacePrimary != NULL)
            
    surfacePrimary->Release();
        if(
    ddraw != NULL)
            
    ddraw->Release();

    Anyone have any quick pointers?
    Last edited by Hunter2; 09-04-2002 at 09:20 PM.
    Just Google It. √

    (\ /)
    ( . .)
    c(")(") This is bunny. Copy and paste bunny into your signature to help him gain world domination.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Replies: 26
    Last Post: 07-05-2010, 10:43 AM
  2. BST inser method seems to be crashing my prog
    By ray_broome in forum C++ Programming
    Replies: 12
    Last Post: 04-22-2005, 12:02 PM
  3. How do I stop cin from crashing my prog
    By Panopticon in forum C++ Programming
    Replies: 10
    Last Post: 12-13-2004, 03:41 PM
  4. why is this prog crashing on delete?
    By Waldo2k2 in forum Windows Programming
    Replies: 2
    Last Post: 12-04-2002, 11:17 PM
  5. sprintf crashing my prog?
    By Eber Kain in forum C++ Programming
    Replies: 11
    Last Post: 11-21-2001, 04:25 AM