URL: https://www.overclockers.at/coding-stuff/ich_hasse_zeiger_in_c_176430/page_2 - zur Vollversion wechseln!
ok... also aufräumen :iijak:
Aber gerade wegen Frage 2 tritt immer folgender glibc error auf:
eigentlich ziemlich eindeutig oder? wenn ich nur einen der beiden pointer (egal welchen!) "free"he dann funkts nämlich auch tadellos ...Code:*** glibc detected *** double free or corruption (!prev): 0xirgendwas *** Aborted
Code:void *buffer = malloc(5 * 64 * sizeof(float)); foat *input = (float*) malloc(5 * 64 * sizeof(float)); input = (float *) buffer; // Verarbeitung geht weiter mit input free(buffer); free(input);
du setzt input auf den beginn von buffer.
danach freest du buffer. somit ist der von buffer allokierte speicher weg. der von input allokierte speicher ist noch da, aber nicht mehr accessable, da du mit dem zeiger alle brücken abgebrochen hast..
und jetzt freest du nochmal buffer (input zeigt ja auf den buffer - speicherbereich!)!
wieso allokierst du zwei gleich große speicherbereiche wenn du dann sowieso nur einen weiter verwendest?
das ist die nächste frage
Zitat von DKCHwieso allokierst du zwei gleich große speicherbereiche wenn du dann sowieso nur einen weiter verwendest?
Um mögliche Fehlerquellen auzuschließen hab ich einfach ne neue Variable eingführt die ich dann type-caste. Würd's so auch gehen?Code:size_t this_function(pre_defined_structure src, char* dst, size_t cnt);
(wenn buffer wie vorher ein float-array ist und buffer_size die Länge ist, die mit malloc allokiert wurde)Code:c = this_function(input_buffer, (void *)(buffer), buffer_size);
Ein Typecast geht prinzipiell schon - aber void* ist was anderes als char*.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025