wann, wie welches Array deleten
-
Hi zusammen also ich hab da so meine Probleme mit Arrays, bzw dem löschen dieser Arrays. Ich zeig euch am besten mal meinen Code, denn es ist ein wenig verzwickt. Also:
Aufruf einer Funktion:
long *pData = 0; // Aufräumen nicht vergessen if(!Samples_to_intArray(Wavefile,pData,0,n,"links")) //holen der WaveWerte //jetzt rechnen mit pData[i] ... //hier sollte ich es doch nun deleten, oder?? Ab hier brauch ich es dann nciht mehr. Aber wie??
Aufgerufene Funktion:
bool CWavealyzeDoc::Samples_to_intArray(fstream Wavefile, long *&pData, ...) { pData = new long[laenge]; //neuen Puffer für Int Werte ... // Am Ende dieser Funktion darf ich ja noch nicht deleten, weil ich in der oberen noch damit rechne. }
Ist das richtig was ich rein Kommentiert habe?
Und wie delete ich denn meine Arrays nun??
(Bislang gar nicht)
Vielen dank schon im Voraus
-
Nach
if(!Samples_to_intArray(Wavefile,pData,0,n,"links")) //holen der WaveWerte
delete pData;
-
YLIREBUS schrieb:
delete pData;
Nicht gut. Das sollte schon delete[] sein.
@Polofreak: Es ist sauberer, wenn der Aufrufer den Speicher bereitstellt. Dann muss das auch nicht auf dem Heap sein.
-
Übergib doch ne Referenz auf nen vector<long>
-
Hm ich dachte auch
delete[] pData;
oder delete pData;Aber dann bekomm ich einen Error:
---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Error!Program: D:\Benni\VC++\wavealyze\Debug\wavealyze.exe
DAMAGE: after Normal block (#193) at 0x012F0068.
(Press Retry to debug the application)
---------------------------
Abbrechen Wiederholen Ignorieren
---------------------------und wenn ich mir die Stelle anschau komm ich hier raus
void __cdecl operator delete(void* p) { #if !defined(_AFX_NO_DEBUG_CRT) && defined(_DEBUG) _free_dbg(p, _NORMAL_BLOCK); #else free(p); #endif }
Und so delete pData[];
bekomm ich nen Syntax Error: ' ] '
-
Die Aufrufe deiner Funktionen und das
delete[] pData;
sind schon richtig. Dein Problem ist dass du irgendwo über die Arraygrenzen von pData geschrieben hast.
Kurt
-
aber ohne delete geht es!
Na dann mach ich mich mal auf die Suche wo ich das mach. Ich hab mich aber auch schon gewundert als ich 11 Werte in ein [6] geschrieben hab und es ging. Aber ich hab mir gedacht, das hat bestimmt nen Grund und hab es auf [11] gemacht.
Vielen Dank mach mich gleich mal auf die Suche.
-
Polofreak schrieb:
aber ohne delete geht es!
Der Check auf Schreiben über die Arraygrenzen hinaus geschieht im operator delete. Wenn du den nicht aufrufst dann auch kein check. Das heisst aber noch lange nicht dass das auch richtig ist.
Polofreak schrieb:
Ich hab mich aber auch schon gewundert als ich 11 Werte in ein [6] geschrieben hab und es ging.
Darauf kannst du dich aber sicher nicht verlassen.
Kurt
-
Ok ich hab grad angefangen total um zu strukturieren, wo bitte ist der Unterschied zwischen
char* pRiff = new char[4];//geht //und char pRiff[4];//oben genanntes Problem
tun die nicht das gleiche?
-
char* pRiff = new char[4];// mit new angefordert muss mit delete[] freigegeben werden char pRiff[4];//daten liegen am stack, werden automatisch freigegeben // dürfen nicht mit delete[] freigegeben werden
Kurt
-
aaaaaaaaaaaaaaaaaaaaaaaaahhhhhhhhhhhhhhhhhhh
perkekt!!
Vielen Dank
(Grundlagen C++
)