Mrowqa Temat założony przez niniejszego użytkownika |
Problem z pamięcią w VC++ » 2011-05-12 16:51:15 Witam! Podczas debugowania aplikacji wyskakuje mi okienko z błędem i taka informacja: Run-Time Check Failure #2 - Stack around the variable 'buf' was corrupted Jest tego mnóstwo na google, ale nie znalazłem odpowiedzi na swój problem... To jest cały kod, podczas którego używam wskaźnika: char * buf = new char[ ile ]; tekst_pomocniczy[ i ] --; kod_szyfru[ ktora ].append( " " ); kod_szyfru[ ktora ].append( itoa( i, buf, 10 ) ); delete[] buf;
Problem leży we wskaźniku ( coś ten błąd znaczy, że obiekt 'buf' został uszkodzony ). Problem nie leży w ilości pamięci rezerwowanej - sprawdziłem i jestem pewny ( o ile chodzi o to, że obiekt rezerwuje za mało :D ). Korzystam z VC++ 2010. Proszę o pomoc ;) Pozdrawiam, Mrowqa |
|
DejaVu |
» 2011-05-12 17:03:37 Piszesz poza zakresem pamięci, uszkadzając zawartosć innej pamięci przez co aplikacja się sypie. Pamiętaj też, że łańcuchy znaków kończą się znakiem terminalnym, więc bufor na tekst musi być o 1 znak większy niż jego faktyczna długość. |
|
Mrowqa Temat założony przez niniejszego użytkownika |
» 2011-05-12 18:23:42 Kochany DejaVu - pisałem, że nie w tym problem ;) Liczba potrzebna to może jeden góra dwa znaki, w moim przypadku ( pisałem, że to testowałem! ). Nawet specjalnie na te dwa znaki dałem bufor 99999999 ( albo większy :D już nie pamiętam :P ). Jest jakieś inne wytłumaczenie ?? EDIT: kodzik ( razem z obliczaniem miejsca ): for( int i = 0; i < tekst_pomocniczy.length(); i++ ) { if( tekst_pomocniczy[ i ] == 'j' || tekst_pomocniczy[ i ] == 'J' ) { int pom = 1, ile = 1; while( pom < i ) { pom *= 10; ile++; } char * buf = new char[ ile ]; tekst_pomocniczy[ i ] --; kod_szyfru[ ktora ].append( " " ); kod_szyfru[ ktora ].append( itoa( i, buf, 10 ) ); delete[] buf; } }
Możliwe, że masz rację DejaVu - tylko, że wcześniej mi jakoś działało dobrze ;) PS --> co do tego algorytmu ( co może wydać się trochę śmieszne ) dla ma sens :D To kawałek mojego programu szyfrującego ( ten powyższy kawałek przedstawia szyfr Playfaira ) |
|
DejaVu |
» 2011-05-12 18:33:35 Kochana Mrowqa :) wychodzisz poza zakres jakiejś talicy :P |
|
Mrowqa Temat założony przez niniejszego użytkownika |
» 2011-05-12 18:36:25 ;D Albo po prostu mrówa ( Mrówa -> Mr. ówqa ->(limity co do nazwy) -> Mrowqa ) EDIT: ile == 0 ? 1: ile poprawka ( nieistotna ;/ ), ale teraz mi wywala jakiegoś HEAP CORUPTED DETECTED: after normal block (#250) at (jakis adres szestnastkowo ) CRT detected that the application wrote to memory after end of heap buffer Domyślam się już, że zapisało coś za końcem tablicy ... Ale gdzie mam ten błąd ?? Nic tam nie widzę ;/ EDIT: jakaś zmyłka :D zmieniłem nazwę bufora i... komunikat ten sam -.- co jest równoznaczne z tym, że błąd może być wszędzie !!! ( ale tu go nie ma i nie potrzebnie tworzyłem ten wątek :P ) Pozdrawiam, Mrowqa |
|
DejaVu |
» 2011-05-12 18:53:50 ile, ktora => możliwe nieprawidłowe indeksy |
|
Mrowqa Temat założony przez niniejszego użytkownika |
» 2011-05-12 18:56:17 ile == 0 ? 1: ile Po co to ja pisałem ;D Specjalnie do tego dałem --> int ile = 1; @up Słucham ;) Co masz na myśli dokładnie ? |
|
DejaVu |
» 2011-05-12 19:18:37 std::vector < int > b; b[ 0 ] = 1;
|
|
« 1 » 2 |