Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    107

    [c++] memoria non written..

    ciao a tutti

    ho un programma che da solo funziona e mi apre un wave mettendo i valori dei due canali dentro due vettori..
    adesso l'ho incorporato in un altro programma e mi da questo errore:

    Errore di applicazione:
    L'istruzione a "0x0042513b" ha fatto riferimento alla memoria "0x004826a8". La memoria non poteva essere "written".

    quello che mi sembra strano e' che se tolgo la riga:

    system("pause");

    non mi da piu' nessun errore..
    cos'e' che non capisco???

    ciao e grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    4
    forse "due vettori.. " superi i limiti di memoria allocata :-|

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    107

    ...

    ..ma mi da errore solo se tengo la riga:

    system("pause");

    ..se la tolgo funziona bene..
    ..?!?..

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    4
    prova a mttere quel cmd prima della modifica del vettore e dimme

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    107
    ..ops, non so bene cosa ho fatto ma adesso non ho piu' quell'errore.. ne ho altri!!
    quello che faccio e' questo:

    int main(int argc, char* argv[])
    {
    const char* NomeFileWave = "RANDOM.wav";

    //class WaveFile
    WaveFile FileWaveToOpen;

    //DDCRET WaveFile::OpenForRead (const char *Filename)
    FileWaveToOpen.OpenForRead(NomeFileWave);

    //DDCRET WaveFile::ReadSamples (INT32 num,WaveFileSample sarray[])
    //n_sample_global=numero di campioni letti in OpenForRead
    INT32 num = n_sample_global;

    //struct WaveFileSample
    //{
    // INT16 chan [MAX_WAVE_CHANNELS];
    //};
    WaveFileSample sarray[351285];

    //DDCRET WaveFile::ReadSamples (INT32 num, WaveFileSample sarray[])
    FileWaveToOpen.ReadSamples ( num, sarray );

    for(int i=0;i<=n_sample_global-1;i++)
    {
    cout << i << "] " << sarray[i].chan[0] << " " << sarray[i].chan[1] << endl;
    }

    //DDCRET WaveFile::Close()
    FileWaveToOpen.Close();

    return 0;
    }

    il mio problema e' che a priori non so la lunghezza di sarray perche' dipende dal file scelto dall'utente e, comunque, oltre una certa dimensione mi da errore di "exception unknown software exception"..
    come faccio??
    ..non ho ancora capito come allocare la memoria dinamicamente..

    PS: le dichiarazioni le ho trovate bellefatte in internet, le chiamate sono mie..

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    4
    in generale la memoria la allochi con NEW
    tuttavia x file molto grossi ti conviene
    allocare memoria virtuale non dalla heap/ram :-|
    ad anzi allocare a blocchi cioe invece di allorare 10Mb
    è meglio fare 10 blocchi uno dopo l'altro da 1 mb :-|

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    107

    mhmm..

    ..l'idea di usare la new l'ho capita ma non ho capito come farlo..

    ..invece di fare:

    //DDCRET WaveFile::ReadSamples (INT32 num,WaveFileSample sarray[])
    WaveFileSample sarray[310272];
    FileWaveToOpen.ReadSamples ( num, sarray );

    dovrei fare:

    //DDCRET WaveFile::ReadSamples (INT32 num,WaveFileSample sarray[])
    WaveFileSample *sarray = new WaveFileSample;
    FileWaveToOpen.ReadSamples ( num, sarray );

    ???

    cosi' compila bene ma eseguendo mi da errore di applicazione: la memoria non poteva essere "written"..

    ..e come si fa ad allocare la memoria a blocchi? non ho ancora trovato esempi che me lo facessero capire..

    grazie!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.