Crash - CreateSurface

Started by
16 comments, last by Ro_Akira 23 years, 10 months ago
Hi, The code below causes my program to crash. Specifically, it doesn''t get past the CreateSurface. No errors, no ''invalid page faults'' or anything, just stops executing... ddsd.dwSize=sizeof(ddsdx); ddsd.dwFlags=DDSD_CAPS/DDSD_HEIGHT/DDSD_WIDTH; ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN; ddsd.dwHeight=64; ddsd.dwWidth=64; DD.Write("DDSURFACEDESC2...ok"); hRet=lpDD->CreateSurface(&ddsd,&Background,NULL); // STOPS HERE DD.Write("CreateSurface...ok"); Oh, by the way, DD is a log file I''m writing to. The ''DDSURFACEDESC2...ok'' gets written to the file, but the ''CreateSurface...ok'' doesn''t. That''s how I''ve narrowed it down to that CreateSurface line. Anybody else have similar problems?
Advertisement
I''m not sure what''s causing the problem but I can see errors in your code.

In this line:
ddsd.dwSize=sizeof(ddsdx);
Why do you write sizeof(ddsdx)?
Write ddsd.dwSize=sizeof(ddsd);

And are you absolutely sure that the CreateSurface function isn''t failing? Have you checked return values?
quote:Original post by Mr Cucumber

I''m not sure what''s causing the problem but I can see errors in your code.

In this line:
ddsd.dwSize=sizeof(ddsdx);
Why do you write sizeof(ddsdx)?
Write ddsd.dwSize=sizeof(ddsd);

And are you absolutely sure that the CreateSurface function isn''t failing? Have you checked return values?


Ah, it was ddsdx for all of them, I just changed it to ddsd while posting, and missed one...

I have...

if (hRet!=DD_OK)
{
_ltoa(hRet,ErrorString,10);
MessageBox(hWnd,ErrorString,"OSSFAIL",MB_OK);
}

But in any case, shouldn''t the log file get written to?
Well, if CreateSurface is actually crashing, no amount of return value checking will make any difference And that second line of logging will never get executed.

My first guess is this: did you actually zero out the memory of ddsd or ddsdx or whatever you''re using before you started filling in its parameters?
Make sure your DD.write is really outputting each time - it may be just sitting in a buffer and giving a false indication of where the error occured. Try DD.write("...ok\n") - the newline may force output.
Ro_Akira:

Kylotan is right in about clearing the memory. I was once doing something with DirectSound and forgot to clear the memory of a stucture and I got weird results. Try adding this above your previously posted code:

ZeroMemory(&ddsd, sizeof(DDSURFACEDESC));

Also, I don''t know if this is just because of the forum or not, but you have:

ddsd.dwFlags=DDSD_CAPS/DDSD_HEIGHT/DDSD_WIDTH;

I can only imagine that you mean:

ddsd.dwFlags = DDSD_CAPS / DDSD_HEIGHT / DDSD_WIDTH;

What you had would certainly cause unpredictable results...

Good luck,
-> Briar LoDeran <-
Ok, nevermind on that last thing. The forum seems to turn pipes into the divided by symbol. I guess that''s why the code tags exist.
    //    

-> Briar LoDeran <-
Ok, nevermind on that last thing. The forum seems to turn pipes into the divided by symbol. I guess that''s why the code tags exist.

-> Briar LoDeran <-
DDSURFACEDESC2 ddsdx;
LPDIRECTDRAWSURFACE7 Background=NULL;

.
.
.

ddsdx.dwSize=sizeof(ddsdx);
ZeroMemory(&ddsdx,sizeof(ddsdx));
ddsdx.dwFlags=DDSD_CAPS/DDSD_HEIGHT/DDSD_WIDTH;
ddsdx.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN;
ddsdx.dwHeight=64;
ddsdx.dwWidth=64;
DD.Write("DDSURFACEDESC2...ok");
hRet=lpDD->CreateSurface(&ddsdx,&Background,NULL); // STOPS HERE
DD.Write("CreateSurface...ok");

DD.Write("CreateOSS...ok");

if (hRet!=DDOK)
{
_ltoa(hRet,ErrorString,10);
MessageBox(hWnd,ErrorString,"OSSFAIL",MB_OK);
}

.
.
.

This is now how the code stands. I tried that ZeroMemory, but it caused no change in the program''s unruley behaviour. I''ve tried that VIDEOMEMORY and SYSTEMMEMORY with dwCaps, in case there was some weird problem to do with that. Didn''t make any difference.

I''m fairly sure that those DD.Write''s are working too. I tried a message box just after the suspected crashline(CreateSurface) and it didn''t appear either. So that''s how I came to that conclusion.

Oh, and the same thing happens (prog. crash), when I do a page flip of the Primary Surface. Don''t know if that''s any help. (Just sounds like more problems to me!)

Anyway, thanks for your replies everyone... and keep them coming please !

quote:Original post by Ro_Akira

ddsdx.dwSize=sizeof(ddsdx);
ZeroMemory(&ddsdx,sizeof(ddsdx));



Er, I believe that should be the other way round shouldn''t it?

i.e. :
ZeroMemory(&ddsdx,sizeof(ddsdx));
ddsdx.dwSize=sizeof(ddsdx);

Well, didn''t make a difference anyway

This topic is closed to new replies.

Advertisement