Article View: pl.comp.os.linux.programowanie
Article #72957Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu
From: Bogdan
Date: Thu, 20 Aug 2020 10:11
Date: Thu, 20 Aug 2020 10:11
50 lines
3616 bytes
3616 bytes
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
Technical Details
Message-ID:
<rhli9c$1rre$1@gioia.aioe.org>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!news.roellig-ltd.de!news.mb-net.net!open-news-network.org!aioe.org!.POSTED.LYwzDoUcTeG7/cJD+l4BPA.user.gioia.aioe.org!not-for-mailReferences:
<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>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!news.roellig-ltd.de!news.mb-net.net!open-news-network.org!aioe.org!.POSTED.LYwzDoUcTeG7/cJD+l4BPA.user.gioia.aioe.org!not-for-mail 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: Thu, 20 Aug 2020 12:11:56 +0200 Organization: Aioe.org NNTP Server Lines: 50 Message-ID: <rhli9c$1rre$1@gioia.aioe.org> 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> NNTP-Posting-Host: LYwzDoUcTeG7/cJD+l4BPA.user.gioia.aioe.org Mime-Version: 1.0 X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.11.0 X-Notice: Filtered by postfilter v. 0.9.2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit