Klassenfrage :)
-
@Th69
Der speicher wird ja aber erst wieder vor einer neuberechnung, wenn die Werte nicht mehr gebraucht werden, freigegeben; zuvor bleibt er doch erhalten? so das die Zeiger auf die richtigen Werte zeigen
-
Nein! Mit dem
memcpy
überschreibst du die mittelsmatrix[i] = (int*)malloc(yres * sizeof(int));
erstellten Werte (und bei einer, hier noch fehlenden, Freigabe würdest du dann einen Laufzeitfehler, sog. "double free", erhalten).
@Schlangenmensch hat dir ja jetzt schon die Lösung verraten, aber eigentlich hätte schon bei deinem C -Code
thr_matrix = matrix;
vollkommen ausgereicht (denn auf das ganze Speicherallozieren und Kopieren kann man verzichten, da die Threads ja direkt den Matrix-Speicher beschreiben können - dein Code wartet ja explizit mit dem
pthread_join
auf die Abarbeitung aller Threads)...
-
@Th69
ich denke mit
matrix[i] = (int*)malloc(yres * sizeof(int));
alloziere ich nur den speicher, und memcpy schreibt mit die neuen Zeiger in das array. Die doppelte Speicherverwaltung ist mir bewusst, das ist der Preis für Thread-Funktion
-
@Th69 sagte in Klassenfrage :
Nein! Mit dem
memcpy
überschreibst du die mittelsmatrix[i] = (int*)malloc(yres * sizeof(int));
erstellten Werte (und bei einer, hier noch fehlenden, Freigabe würdest du dann einen Laufzeitfehler, sog. "double free", erhalten).
..
thr_matrix = matrix;vollkommen ausgereicht (denn auf das ganze Speicherallozieren und Kopieren kann man verzichten, da die Threads ja direkt den Matrix-Speicher beschreiben können - dein Code wartet ja explizit mit dem `pthread_join` auf die Abarbeitung aller Threads)...
Das hab ich noch gar nicht ausprobiert! geht das ?
-
LOL
-
@EL-europ
Jetzt sind auch keine Abbrüche mehr mit den Sanitizern, aber Meldungen nach Programmende.
-
@Th69
Oje, jetzt hab ich mir selbst geantwortet
Ich pushe git jetzt mal, die Apple->calc sollte soweit funzen?
die rohen c-array one-, ten- und iter- Member werd ich mal in std::vector versuchen, vielleicht gehen dann noch sanitizer Meldungen weg. Da scheint mir in Apple->sort() auch nicht was ganz sauber zu sein.
-
Dieser Beitrag wurde gelöscht!
-
@EL-europ sagte in Klassenfrage :
Das hab ich noch gar nicht ausprobiert! geht das ?
Du musst nur beachten, dass du ausschließlich den Pointer kopierst. D.h, du hast dann zwei Pointer die auf den selben Speicherbereich zeigen
-
Ich hab die unnötoge Speicherallocierung für **matrix und **colormatrix erkannt und die Sanitizermeldungen dieser arrays weg bekommen Jetzt hab ich noch welche durch **iterMembers in Apple->sort(). Könnt ihr mir bitte helfen die noch weg zu bekommen?