Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.os.linux.programowanie > #2215
| From | Bogdan <bogdan@poczta.gazeta.pl> |
|---|---|
| Newsgroups | pl.comp.os.linux.programowanie |
| Subject | Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu |
| Date | 2020-08-20 12:11 +0200 |
| Organization | Aioe.org NNTP Server |
| Message-ID | <rhli9c$1rre$1@gioia.aioe.org> (permalink) |
| References | <rh69ni$21vgn$1@portraits.wsisiz.edu.pl> <20200814200505.3b77dc82@mateusz> <rhiu00$17eoh$1@portraits.wsisiz.edu.pl> <rhlbpr$1s42c$1@portraits.wsisiz.edu.pl> <20200820103955.7c6a9db1@mateusz> |
W dniu 20.08.2020 o 10:39, Mateusz Viste pisze:
> 2020-08-20 o 10:21 +0200, RM napisał:
>> Jak dam tak:
>> php_result_dir = ""; // w konstruktorze
>> ...
>> TRACE("php_result_dir before:" << php_result_dir);
>> assert(php_result_dir.empty());
>> php_result_dir = argv[2]; // TU BŁĄD!!!
>> to mam assert failed, a TRACE wypisuje pusty string to dwukropku.
>> Nie wiem o co chodzi.
>
> Sory, też nie wiem. To C++ jest, a ja ogarniam tylko C (bez plusów),
> zupełnie nie wiem jak te plusowe stringi powinny działać. Ew. zapytaj na
> pl.comp.lang.c, bo problem raczej nie jest specyficznie linuksowy.
> Jeśli zapytasz tam, podaj również swoją deklarację php_result_dir oraz
> sposób w jaki to allokujesz (jeśli w ogóle).
>
> Mateusz
>
Podłączam się pod to, zwłaszcza ostatnie zdanie.
Nie będę udawał, że jestem jakiś C++ master (też wolę C), ale w C++
można przeciążyć operator, taki jak "=", i ma to miejsce też w
przypadku klasy string. Linia "php_result_dir = argv[2]" wywołuje kod
z klasy string, który potem różnymi ścieżkami trafia do metody
_M_replace(), którą widać na stack trace.
Jako że nie ma tu przypisania "string = string", tylko "string =
char*", to tak tylko zgaduję, że php_result_dir musi być już
zainicjalizowana na cokolwiek (aby wewnętrzna struktura do trzymania
zawartości była już zaallokowana), bo pewniee kopiowanie string-string
jest zaimplementowane prościej. Niby to już masz, ale nie mogę
odtworzyć tego problemu u siebie (g++ 9.2.1).
Mój szybki test pokazuje, że nie musi chodzić akurat o alokację (tj.
mój przypadek testowy się nie wywala), więc może rolę gra tu coś
jeszcze. Może php_result_dir miał już przypisaną wartość, ale w
międzyczasie wewnętrzny wskaźnik (czy cokolwiek) został
zresetowany/popsuty/zmieniony na NULL i na tym właśnie pada memmove().
Operator << też jest przeciążony, a pusty wynik może oznaczać wiele
rzeczy: niezaallokowana zmienna, pusta tablica, NULL i może jeszcze
coś. To już zależy od implementacji klasy string, co ona w takich
przypadkach wyświetla.
A co jest w argv[2]? Może NULL lub pusty string i to coś psuje?
--
Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS)
Kurs asemblera x86 (DOS, GNU/Linux): http://bogdro.evai.pl
Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
www.Xiph.org www.TorProject.org Soft(EN): http://bogdro.evai.pl/soft
Back to pl.comp.os.linux.programowanie | Previous | Next — Previous in thread | Next in thread | Find similar
../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu RM <robert_magdziarz@wp.pl> - 2020-08-14 17:13 +0200
Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu Mateusz Viste <mateusz@xyz.invalid> - 2020-08-14 20:05 +0200
Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu RM <robert_magdziarz@wp.pl> - 2020-08-19 12:13 +0200
Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu RM <robert_magdziarz@wp.pl> - 2020-08-20 10:21 +0200
Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu Mateusz Viste <mateusz@xyz.invalid> - 2020-08-20 10:39 +0200
Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu Bogdan <bogdan@poczta.gazeta.pl> - 2020-08-20 12:11 +0200
Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu RM <robert_magdziarz@wp.pl> - 2020-08-20 13:48 +0200
Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu RM <robert_magdziarz@wp.pl> - 2020-08-20 14:32 +0200
Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu Mateusz Viste <mateusz@xyz.invalid> - 2020-08-20 14:36 +0200
Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu RM <robert_magdziarz@wp.pl> - 2020-08-20 14:39 +0200
Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu RM <robert_magdziarz@wp.pl> - 2020-08-20 19:33 +0200
Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu RM <robert_magdziarz@wp.pl> - 2020-08-21 20:04 +0200
Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu queequeg@trust.no1 (Queequeg) - 2020-08-23 00:18 +0000
csiph-web