float array liefert Speicherzugriffsfehler...



  • Hi,

    ich habe eine Klasse nennen wir Sie A:

    Im Header:

    ...
    private:
      float  *m_pArray_AG1;
      float  *m_pArray_AG2;
    

    in der cpp Datei in einer Funktion...

    ...
    if( m_pArray_AG1 )
        {
            delete[] m_pArray_AG1;
            m_pArray_AG1 = NULL;
        }
    
        if( m_pArray_AG2 )
        {
            delete[] m_pArray_AG2;
            m_pArray_AG2 = NULL;
        }
    
        m_pArray_AG1 = new float[ m_nbrVal ];
        m_pArray_AG2 = new float[ m_nbrVal ];
    ...
    
    void A::GetPointerToArray1( float* pArray_AG1 )
    {
        pArray_AG1 = m_pArray_AG1;
    }
    
    void A:GetPointerToArray2( float* pArray_AG2 )
    {
        pArray_AG2 = m_pArray_AG2;
    }
    

    in einer anderen Klasse nene wir sie B...

    im Header:

    private: 
      float  *m_pArray_AG1;
      float  *m_pArray_AG2;
    
    ...
    A->GetPointerToArray1( m_pArray_AG1 );
    A->GetPointerToArray2( m_pArray_AG2 );
    

    und in anderen einer Funktion von B:

    m_pArray_AG1[n] = (float)((sP[n]*2.2)/129.12);
    

    n läuft von 0 bis 30000. Array groß genug.
    Hier gibts nach fünf durchläufen einen Speicherzuordnungsfehler.

    Gruß



  • void A::GetPointerToArray1( float* pArray_AG1 )
    

    übergibt den Zeiger by-value, d.h. wenn du ihn im Funktionskörper auf einen anderen Zeiger setzt, merkt das außerhalb der Funktion niemand. Meintest du

    void A::GetPointerToArray1(float *&pArray_AG1)
    

    ?


  • Mod

    Ich mag's jetzt nicht durchgucken, denn wahrscheinlich löst sich dein Problem ganz alleine durch meine Gegenfrage: Wieso programmierst du std::vector nach?



  • Hi,

    SeppJ schrieb:

    Ich mag's jetzt nicht durchgucken....

    Ja, stimmt das ist mix aus C und C++ Code.

    seldon schrieb:

    void A::GetPointerToArray1( float* pArray_AG1 )
    

    übergibt den Zeiger by-value, d.h. wenn du ihn im Funktionskörper auf einen anderen Zeiger setzt, merkt das außerhalb der Funktion niemand. Meintest du

    void A::GetPointerToArray1(float *&pArray_AG1)
    

    ?

    Ja, das & habe ich vergessen. Problem gelöst und werde daran denken, das ich das viel besser mit std::vector löse. Danke.

    Gruß
    Franky


Anmelden zum Antworten