Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.os.linux.programowanie > #2215

Re: ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: Nie ma takiego pliku ani katalogu

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

../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