Mam dość nietypowy problem. Na zdjęciu znajduje się fragment kodu, który za pomocą aproksymacji interpolacyjnej określa wartości punktów pośrednich pewnej funkcji (w sumie to nieistotne). Chodzi o to, że kod ten działa, gdy kompiluję go w trybie Debug, niemniej jednak po skompilowaniu w trybie Release i uruchomieniu programu otrzymuję następujący komunikat (w około 70% przypadków, czasami działa), zatrzymuje się wykonywać na linii 78.:
MNP3(4498,0x1008b53c0) malloc: *** error for object 0x10200e600: incorrect checksum for freed object - object was probably modified after being freed.
Zastanawiacie się pewnie co w linii 76. robi ten print? Otóż ku mojemu zdziwieniu rozwiązuje on problem (no nie do końca, bo tak nie powinno być xd). Odkomentowanie go eliminuje wspomniany problem z pamięcią. Czy ktoś ma jakikolwiek pomysł, dlaczego tak jest (i co mogę na to poradzić)?
@Mooops123: zrób breakpoint na malloc error, pierwsze podpowiedzi googla jak to wyszukiwales i powiedz która to konkretnie zmienna się psuje, ten print to przypadek, wyczysciles projekt i budowales od nowa?
@Donald_W: U mnie również działa z +=, niemniej jednak tak zdecydowanie nie powinno być. Wiesz dlaczego tak się dzieje? Jest to choroba wieku dziecięcego Swifta? Bo szczerze mówiąc jak ja mam się obawiać używania takich elementarnych metod jak .append w Stringu, to to nie świadczy dobrze o Swifcie.
@Mooops123: bardzo mozliwe, ze jest to bug :/ jak znajde chwile to popatrze w zrodla i jak ogarne czemu tak jest to dam znac. Najlepiej to zglos, wszystkim bedzie zylo sie lepiej jak to zalataja ;)
@Mooops123: Mam nadzieję, że nie, powinni to shotfixować jak najszybciej. Dzięki @wczoraj za link, też przeglądałem appenda, ale += nie mogłem znaleźć :/
Hej Mireczki!
Mam dość nietypowy problem. Na zdjęciu znajduje się fragment kodu, który za pomocą aproksymacji interpolacyjnej określa wartości punktów pośrednich pewnej funkcji (w sumie to nieistotne). Chodzi o to, że kod ten działa, gdy kompiluję go w trybie Debug, niemniej jednak po skompilowaniu w trybie Release i uruchomieniu programu otrzymuję następujący komunikat (w około 70% przypadków, czasami działa), zatrzymuje się wykonywać na linii 78.:
Zastanawiacie się pewnie co w linii 76. robi ten print? Otóż ku mojemu zdziwieniu rozwiązuje on problem (no nie do końca, bo tak nie powinno być xd). Odkomentowanie go eliminuje wspomniany problem z pamięcią. Czy ktoś ma jakikolwiek pomysł, dlaczego tak jest (i co mogę na to poradzić)?
libsystemmalloc.dylib`mallocerror_break:
-> 0x7fffc193515f <+0>: pushq %rbp
0x7fffc1935160 <+1>: movq %rsp, %rbp
0x7fffc1935163 <+4>: nop
0x7fffc1935164 <+5>: nopl (%rax)
0x7fffc1935168 <+9>: popq %rbp
0x7fffc1935169 <+10>: retq
Zatrzymało się tam, gdzie jest strzałka.
Google niewiele pomaga, mówi tylko to, co już wynika z samego błędu (próba modyfikacji pamięci po jej zwolnieniu).
za pierwszym naciśnięciem jestem na czymś takim:
Tutaj znajduje się kod programu:
https://pastebin.com/QCPgHK73
Typ projektu to "Command Line Application", cel to macOS.
Program wymaga pliku z danymi, którego ścieżkę podajecie w linii 20.
Dane, na których program się wywala (raczej nie jest to zależne o tych konkretnych danych, no ale):
https://pastebin.com/i72a8vG0
Ważne, że problem przynajmniej u mnie powstaje tylko, gdy kompiluję w trybie Release.
Tablica na start:
var predictedPoints: [Relation] = []Dodawanie w forze:
let point = (predictedDistance, searchedHeight)predictedPoints += [point]
// predictedPoints.append(point)
`
U mnie działa bez problemów z +=, a append sypie tym samym błędem co u Ciebie.
Komentarz usunięty przez autora
https://github.com/apple/swift/blob/c8d2f179e72d35538348146156e0df07cd30b83e/stdlib/public/core/Arrays.swift.gyb#L1438