Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z pamięcią w VC++

Ostatnio zmodyfikowano 2011-05-12 21:39
Autor Wiadomość
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:
C/C++
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
P-32983
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ść.
P-32985
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 ):
C/C++
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++; } // od gory do tad - sprawdzenie ilosci znakow + 1 na znak NULL
        //ile += 999999999999; <-- uzywalem tego i tez blad
        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 )
P-32986
DejaVu
» 2011-05-12 18:33:35
Kochana Mrowqa :) wychodzisz poza zakres jakiejś talicy :P
P-32987
Mrowqa
Temat założony przez niniejszego użytkownika
» 2011-05-12 18:36:25
Kochany Mrowqa :)
 ;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
P-32989
DejaVu
» 2011-05-12 18:53:50
ile, ktora => możliwe nieprawidłowe indeksy
P-32991
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 ?
P-32992
DejaVu
» 2011-05-12 19:18:37
C/C++
std::vector < int > b;
b[ 0 ] = 1; //zonk
P-32993
« 1 » 2
  Strona 1 z 2 Następna strona