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 mittels

    matrix[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 mittels

    matrix[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?