Gå til innhold

First-chance exception at 0x00409067


Anbefalte innlegg

hei

 

hva har jeg gjort nå.

 

First-chance exception at 0x00409067 in Flight-Real.exe: 0xC0000005: Access violation reading location 0x00000000.

 

 

Unhandled exception at 0x00409067 in Flight-Real.exe: 0xC0000005: Access violation reading location 0x00000000.

 

håper noen et hva jeg kan ha gjort?

eventuelt hva jeg må fikse på.

 

mvh. Fredrik

Lenke til kommentar
Videoannonse
Annonse

Eksempel:

 

// Riktig
Plane* p = new Plane;
if (p->speed() > 0) {
    std::cout << "The plane is moving!\n";
}


// Galt
Plane* p;
if (p->speed() > 0) {
    std::cout << "The plane is not moving!\n";
}

 

 

Å bruke en try-catch-block og finne ut hva slags exception som blir kastet er kanskje heller ikke så dumt.

 

Edit: Legg merke til at det i mange tilfeller er en funksjon som gir deg en peker, avhengig av hvilket API det er snakk om. I et slikt tilfelle gjør du det på denne måten: Plane* p = CreatePlane();

Endret av Myubi
Lenke til kommentar

hei igjen...

 

lurer bare på om dette kan funke.eller er det dette som lager feilen?

 

IDirectMusicLoader8 *dmusicLoader = 0;              // the loader
IDirectMusicPerformance8 *dmusicPerformance = 0;    // the performance
IDirectMusicSegment8 *dmusicSegment = 0;            // the segment
IDirectMusicAudioPath *dmusic3DAudioPath = 0;       // the audiopath
IDirectSound3DBuffer *ds3DBuffer = 0;               // 3d buffer
IDirectSound3DListener *ds3DListener = 0;           // 3d listener

 

håper på et raskt svar :thumbup:

 

mvh. Fredrik

Lenke til kommentar
hei igjen...

 

lurer bare på om dette kan funke.eller er det dette som lager feilen?

 

IDirectMusicLoader8 *dmusicLoader = 0;              // the loader
IDirectMusicPerformance8 *dmusicPerformance = 0;    // the performance
IDirectMusicSegment8 *dmusicSegment = 0;            // the segment
IDirectMusicAudioPath *dmusic3DAudioPath = 0;       // the audiopath
IDirectSound3DBuffer *ds3DBuffer = 0;               // 3d buffer
IDirectSound3DListener *ds3DListener = 0;           // 3d listener

 

håper på et raskt svar :thumbup:

 

mvh. Fredrik

Dette er ikke feil, men så langt meningsløst.

 

Pekerne må peke på noe før de brukes. Nå peker de på adresse 0. Så alt avhenger av hva som skjer videre.

Lenke til kommentar

ok. bruker et eksempel fra en bok jeg har.

 

#define INITGUID                   // we use GUID's with DMusic

////// Includes
#include <windows.h>          // standard Windows app include
#include <dmusicc.h>               // DirectMusic includes
#include <dmusici.h>
#include <d3d9types.h>             // for D3DVECTOR
#include <cguid.h>                 // for GUID_NULL
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


// //// DirectMusic variables
IDirectMusicLoader8 *dmusicLoader = 0;              // the loader
IDirectMusicPerformance8 *dmusicPerformance = 0;    // the performance
IDirectMusicSegment8 *dmusicSegment = 0;            // the segment
IDirectMusicAudioPath *dmusic3DAudioPath = 0;       // the audiopath
IDirectSound3DBuffer *ds3DBuffer = 0;               // 3d buffer
IDirectSound3DListener *ds3DListener = 0;           // 3d listener

DS3DBUFFER dsBufferParams;                             // 3d buffer properties
DS3DLISTENER dsListenerParams; 


bool InitDirectXAudio(HWND hwnd)
{
    char pathStr[MAX_PATH];       // path for audio file
    WCHAR wcharStr[MAX_PATH];

    // create the loader object
    if (FAILED(CoCreateInstance(CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC,
                                IID_IDirectMusicLoader8, (void**)&dmusicLoader)))
    {
         MessageBox(hwnd, "Unable to create the IDirectMusicLoader8 object!\nPress OK to exit",
                    "ERROR!", MB_OK);
         return false;
    }

    // create the performance object
    if (FAILED(CoCreateInstance(CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC,
                                IID_IDirectMusicPerformance8, (void**)&dmusicPerformance)))
    {
         MessageBox(hwnd, "Unable to create the IDirectMusicPerformance8 object!\nPress OK to exit",
                    "ERROR!", MB_OK);
         return false;
    }

    // intialize DirectMusic and DirectSound
    if (FAILED(dmusicPerformance->InitAudio(NULL, NULL, NULL, DMUS_APATH_DYNAMIC_STEREO, 64,
                                 DMUS_AUDIOF_ALL, NULL)))
    {
         MessageBox(hwnd, "Unable to initialize audio! Press OK to exit", "ERROR!", MB_OK);
         return false;
    }

    // create a standard 3D audiopath
    if (FAILED(dmusicPerformance->CreateStandardAudioPath(DMUS_APATH_DYNAMIC_3D,
                                                          64, TRUE, &dmusic3DAudioPath)))
    {
         MessageBox(hwnd, "Unable to create standard 3D audiopath! Press OK to exit",
                    "ERROR!", MB_OK);
         return false;
    }

    // get the 3D buffer in the audiopath
    if (FAILED(dmusic3DAudioPath->GetObjectInPath(0, DMUS_PATH_BUFFER, 0, GUID_NULL, 0,
                                                  IID_IDirectSound3DBuffer,
                                                  (void**)&ds3DBuffer)))
    {
         MessageBox(hwnd, "Unable to retrieve 3D buffer from audiopath! Press OK to exit",
                    "ERROR!", MB_OK);
         return false;
    }

    // get the 3D buffer parameters
    dsBufferParams.dwSize = sizeof(DS3DBUFFER);
    ds3DBuffer->GetAllParameters(&dsBufferParams);

    // set the new 3D buffer parameters
    dsBufferParams.dwMode = DS3DMODE_HEADRELATIVE;    // relative to the listener
    ds3DBuffer->SetAllParameters(&dsBufferParams, DS3D_IMMEDIATE);

    // retrieve the listener from the audiopath
    if (FAILED(dmusic3DAudioPath->GetObjectInPath(0, DMUS_PATH_PRIMARY_BUFFER, 0, GUID_NULL, 0, 
                                                 IID_IDirectSound3DListener,
                                                 (void**)&ds3DListener)))
    {
         MessageBox(hwnd, "Unable to retrieve the listener! Press OK to exit",
                    "ERROR!", MB_OK);
         return false;
    }

    // get the listener parameters
    dsListenerParams.dwSize = sizeof(DS3DLISTENER);
    ds3DListener->GetAllParameters(&dsListenerParams);

    // set position of listener
    dsListenerParams.vPosition.x = 0.0f;
    dsListenerParams.vPosition.y = 0.0f;
    dsListenerParams.vPosition.z = 0.0f;
    ds3DListener->SetAllParameters(&dsListenerParams, DS3D_IMMEDIATE);

    // retrieve the current directory
    GetCurrentDirectory(MAX_PATH, pathStr);

    // convert to unicode string
    MultiByteToWideChar(CP_ACP, 0, pathStr, -1, wcharStr, MAX_PATH);

    // set the search directory
    dmusicLoader->SetSearchDirectory(GUID_DirectMusicAllTypes, wcharStr, FALSE);

    return true;
}

// LoadSegment()
// desc: load a segment from a file
bool LoadSegment(HWND hwnd, char *filename)
{
    WCHAR wcharStr[MAX_PATH];

    // convert filename to unicode string
    MultiByteToWideChar(CP_ACP, 0, filename, -1, wcharStr, MAX_PATH);

    // load the segment from file
    if (FAILED(dmusicLoader->LoadObjectFromFile(CLSID_DirectMusicSegment,
                                                IID_IDirectMusicSegment8,
                                                wcharStr,
                                                (void**)&dmusicSegment)))
    {
         MessageBox(hwnd, "Audio file not found! Press OK to exit",
                    "ERROR!", MB_OK);

         return false;
    }

    // set the number of repeats for the segment to infinite
    dmusicSegment->SetRepeats(DMUS_SEG_REPEAT_INFINITE);

    // download the segment's instruments to the audiopath
    dmusicSegment->Download(dmusic3DAudioPath);

    return true;
}

// PlaySegment()
// desc: start playing a segment
void PlaySegment(IDirectMusicPerformance8* dmPerf, IDirectMusicSegment8* dmSeg)
{
    // play the segment on the next beat
    dmPerf->PlaySegmentEx(dmSeg, NULL, NULL, DMUS_SEGF_DEFAULT, 0,
                          NULL, NULL, dmusic3DAudioPath);
}

// StopSegment()
// desc: stop a segment from playing
void StopSegment(IDirectMusicPerformance8* dmPerf, IDirectMusicSegment8* dmSeg)
{
    // stop the dmSeg from playing
    dmPerf->StopEx(dmSeg, 0, 0);
}

// CloseDown()
// desc: shutdown music performance
void CloseDown(IDirectMusicPerformance8* dmPerf)
{
    // stop the music
    dmPerf->Stop(NULL, NULL, 0, 0);

    // close down DirectMusic
    dmPerf->CloseDown();
}

// Set3DSoundParams()
// desc: sets the 3d buffer parameters
void Set3DSoundParams(float doppler, float rolloff, float minDist, float maxDist)
{
    // set doppler and rolloff parameters
    dsListenerParams.flDopplerFactor = doppler;
    dsListenerParams.flRolloffFactor = rolloff;

    if (ds3DListener)
         ds3DListener->SetAllParameters(&dsListenerParams, DS3D_IMMEDIATE);

    // set minimum and maximum distances
    dsBufferParams.flMinDistance = minDist;
    dsBufferParams.flMaxDistance = maxDist;

    if (ds3DBuffer)
         ds3DBuffer->SetAllParameters(&dsBufferParams, DS3D_IMMEDIATE);
}

// Set3DSoundPos()
// desc: updates position of sound source (accepts OpenGL coordinates)
void Set3DSoundPos(IDirectSound3DBuffer* dsBuff, float x, float y, float z)
{
    // we use -z because DirectX and OpenGL z-axes are flipped
    if (dsBuff != NULL)
    {
         dsBuff->SetPosition(x, y, -z, DS3D_IMMEDIATE);
    }
}

 

sånn. litt mye kode.

 

mvh. Fredrik

 

Edit: Tror jeg fant det ut. er det den

CoCreateInstance(CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC,
                                IID_IDirectMusicPerformance8, (void**)&dmusicPerformance)

som lager interfacen?

 

Edit 2: da skal det vel ikke være noen feil?

Endret av Fredrik90
Lenke til kommentar

Jeg har kikka litt, kan ikke umiddelbart se noe som er feil. Linja du har trukket ut ser grei nok ut for meg.

 

Bruk en debugger for å se hvor det kræsjer. Eller lag en logfil eller log til terminal. Men om du logger, ikke gjør tabben å brukke buffret output. Bruk f.x clog eller cerr eller flush() om du skriver til fil.

Lenke til kommentar

hei igjen....

 

nå får jeg opp dette her.

First-chance exception at 0x00405157 in Flight-Real.exe: 0xC0000005: Access violation reading location 0x00000000.
Unhandled exception at 0x00405157 in Flight-Real.exe: 0xC0000005: Access violation reading location 0x00000000.
The program '[1768] Flight-Real.exe: Native' has exited with code 0 (0x0).

 

er det noen mulighet for at jeg kan ved og se på disse talene si noe om når i koden det skjer. tidlig, sent, midt i osv. eller er dette helt umulig?

 

mvh. Fredrik

Lenke til kommentar

Det kan virke som at "djunpack" er et program som pakker ut eller installerer gdb. Jeg har aldri installert gdb i Windows, så jeg vet ikke sikkert. Har du ikke noe dokumentasjon du kan lese?

 

 

 

Angående koden: Det går, men så fort du sier

 

screen_name = "Oj, dette var en litt for lang tekststreng!\n";

har du et problem...

Lenke til kommentar

hei...

 

denne her er riktig ikke sant?

CoCreateInstance(CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC,
                               IID_IDirectMusicPerformance8, (void**)&dmusicPerformance)

 

når jeg bruker den så returnerer den en error. ikke syntax men når programet kjører. så er den riktig?

 

mvh. Fredrik

 

edit: sånn her ser hele ut.

     if (FAILED(CoCreateInstance(CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC,
                                IID_IDirectMusicLoader8, (void**)&dmusicLoader)))
    {
         MessageBox(hwnd, "Unable to create the IDirectMusicLoader8 object!\nPress OK to exit",
                    "ERROR!", MB_OK);
         return false;
    }

 

edit 2: ved og komentere ut

 

return false

 

så har jeg funnet ut at det er denne her som forårsaker feil.

 

     if (FAILED(dmusicPerformance->InitAudio(NULL, NULL, NULL, DMUS_APATH_DYNAMIC_STEREO, 64,
                                 DMUS_AUDIOF_ALL, NULL)))
    {
         MessageBox(hwnd, "Unable to initialize audio! Press OK to exit", "ERROR!", MB_OK);
         //return false;
    }

 

eller der kommer ikke meldingsboksen opp, det bare klikker.... så noen som vet? feilen over er fortsatt feil for og si det sånn.

Endret av Fredrik90
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...