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)
?
-
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