Smartpointer auf Array von Listen



  • Hallo,
    ich möchte mit einem unique pointer auf eins Array von String Listen zeigen:

     auto sublists=unique_ptr<list<string>>(new list<string>[10]);
    

    Compiler akzeptiert die o.g. Zeile, jedoch kommt es zur Laufzeit zu einer Fehlermeldung:

    munmap_chunk(): invalid pointer

    Process finished with exit code 134 (interrupted by signal 6: SIGABRT)

    Kann mir jemand schreiben wie die korrekte Syntax lautet?



  • Erstmal zum Bug:
    du benutzt array new new T[n] und deletest mit stinknormalem delete.
    std::unique_ptr<T[]> müsstest du verwenden für das korrekte delete (array delete).

    Die Datenstruktur ist mir allerdings hochgradig suspekt.

    warum unique_ptr?
    warum list?
    warum ein list array?
    warum nicht vector?



  • Statt [10] solltest du ein std::array<T, 10> benutzen.



  • Danke für Eure Tips. Es hat geklappt.
    Hintergrund: Ich will eine Liste in Teillisten unterteilen, die dann von Threads separat bearbeiten werden. Das Unterteilen soll in einer Funktion passieren. In der Funktion werden diese Teillisten erzeugt und als Smartpointer zurückgegeben.

    unique_ptr<list<string>[]> split_list(const list<string> &datalist, const int n)
    

    Zum Beispiel soll eine Liste mit 100 Elementen in 5 Teillisten mit 20 Elementen unterteilt werden, die dann von 5 Threads seperat bearbeitet werden.



  • @asd1 Du könntest einfach einen std::vector<std::list<std::string>> returnen und somit komplett auf den Smartpointer verzichten.

    Abgesehen davon, dass list immer suspekt ist, insbesondere wenn es um Performance geht. Wie findet die Aufteilung statt? Könnte man vielleicht besser Iteratoren auf die Schnittpunkte returnen - (wenn die gesplitteren Listen jeweils zusammenhängende Bereiche haben) und den Threads dann ein Iteratorenpaar als Argument übergeben?



  • @wob sagte in Smartpointer auf Array von Listen:

    Abgesehen davon, dass list immer suspekt ist, insbesondere wenn es um Performance geht.

    Naja es gibt einen guten Anwendungsfall, und das ist wenn man vom Splicen der Listen profitieren kann.


Log in to reply