Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Ostrzeżenie C4172
#1
Cześć chłopaki, nie mogłem znaleźć rozwiązania tego problemu na funkcji zwracającej wchar_t *       Kod:   wchar_t * UObject :: GetName () {wchat_t cOutBuffer [256]; swprintf_s (cOutBuffer, "% S", this -> Name. GetName ()); return cOutBuffer; // Ostrzeżenie C4172: powracający adres zmiennej lokalnej lub tymczasowej}   Naprawię ostrzeżenie z deklaracją     Kod:   static wchar_t cOutBuffer [256];   ale jeśli mam asynchroniczne wywołanie z powodu haków na GetName (), mam dziwny wynik po powrocie ze statycznym wskaźnikiem.   jest to wynikiem statycznego wchar_t     Kod:   Sektor S. RawDis lub S ruda. DistributionF oat tWatchManager. SpikeWatch   zamiast tego powinno być     Kod:   Rdzeń ScriptStruct. DistributionVector. RawDistributionVector ScriptStruct Core. DistributionFloat. RawDistributionFloat ScriptStruct Core. cStatWatchManager. SpikeWatch   Ktoś ma pomysł, jak sprawić, żeby działał inaczej?
Reply
#2
"wchat_t" nie będzie działać tak dobrze dla ciebie. Zwracasz wskaźnik do zmiennej lokalnej. Zostanie zniszczony po powrocie funkcji. Podczas tworzenia statycznej zmiennej lokalnej funkcja powinna działać. Jesteś jednak dużym S w swojej funkcji swprintf_s. Dokumentacja mówi, że mały s jest łańcuchem. Dlaczego nie porzucisz swprintf i nie użyjesz memcpy?
Reply
#3
Może po prostu? Kod: zwróć to -> Nazwa. GetName ()
Reply
#4
To jest moje GetName: Kod: char * UObject :: GetName () {static char cOutBuffer [256]; strcpy_s (cOutBuffer, this -> Name. GetName ()); return cOutBuffer; } Więc twoje też powinny działać dobrze, idk, dlaczego to nie działa.
Reply
#5
Zacytować: Napisał R00T88 Hook1 wywołanie funkcji GetName () i Hook2 GetName () powoduje, że wyniku nie można przewidzieć. Może nie wyjaśniam tego problemu bardzo dobrze. Tak, możliwe, że wyścig danych.
Reply
#6
Zacytować: Originally Posted by Hanoi Tak, możliwe, że wyścig danych. Myślałem o implementacji EnterCriticalSection () / LeaveCriticalSection () może to być poprawne rozwiązanie?
Reply
#7
Nie, napraw swój kod zamiast używać buforów globalnych? Myślę, że już wcześniej wysłałem odpowiedź. Ta sama odpowiedź znajduje się tutaj: http://www.unknowncheats.me/forum/1022615-post1.html Nikt nie zadał sobie pytania, dlaczego generator SDK TheFeckless miał takie brzmienie?
Reply
#8
wtf, co jest ze wszystkimi lokalnymi buforami statycznymi i krytycznymi sekcjami? to w żadnym wypadku nic nie jest bezpieczne / przyzwoite rozwiązanie ... jeśli chcesz zwrócić ciągi, użyj klasy dla jej (std :: wstring) lub poproś rozmówcę o przydzielenie bufora i zrzuć pliki w tym. zwrócenie lokalnego bufora (niestatycznego) ulegnie uszkodzeniu zgodnie z ewolucją, zwrócenie statycznego lokalnego bufora wcale nie jest bezpieczne dla wątków (drugi wątek wywołuje go, nadpisuje dane od pierwszego) wtf to ta blokada nawet tam robiąc?
Reply
#9
__declspec (wątek) static wchar_t cOutBuffer [0x100]; ?
Reply
#10
Zacytować: Napisał pierwotnie InUrFace __declspec (wątek) static wchar_t cOutBuffer [0x100]; ? Lepiej nie używaj cOutBuffer bezpośrednio, ale otrzymaj jeden raz ptr do niego
Reply




Users browsing this thread: 1 Guest(s)