AJOT74 Temat założony przez niniejszego użytkownika |
Program działa a później CRASH » 2017-05-29 19:54:18 Napisałem sobie taki prosty program: #include <conio.h> #include <dirent.h> #include <windows.h> #include <fstream>
using namespace std;
string pliczek, rozsz, loadplik, saveplik, rok, mies, dzien, folder, frok, fmies, fdzien; int pozycja, i;
struct dirent * plik; DIR * sciezka;
FILETIME dane; SYSTEMTIME danex, daney; HANDLE hPlik;
int main() { if(( sciezka = opendir( "." ) ) ) { while(( plik = readdir( sciezka ) ) ) { pliczek = plik->d_name; if( pliczek != "." ) { if( pliczek != ".." ) { pozycja = 0; for( i = 0; i < pliczek.length(); i++ ) if( pliczek[ i ] == '.' ) pozycja = i; if( pozycja != 0 ) { rozsz = pliczek; rozsz.erase( 0, pozycja + 1 ); hPlik = CreateFile( pliczek.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL ); GetFileTime( hPlik, NULL, NULL, & dane ); CloseHandle( hPlik ); FileTimeToSystemTime( & dane, & daney ); SystemTimeToTzSpecificLocalTime( NULL, & daney, & danex ); sprintf(( char * ) rok.c_str(), "%d", danex.wYear ); sprintf(( char * ) mies.c_str(), "%d", danex.wMonth ); sprintf(( char * ) dzien.c_str(), "%d", danex.wDay ); frok = rok.c_str(); fmies = mies.c_str(); if( fmies.length() == 1 ) fmies = "0" + fmies; fdzien = dzien.c_str(); if( fdzien.length() == 1 ) fdzien = "0" + fdzien; printf( pliczek.c_str() ); printf( " -data modyfikacji: " ); folder = frok + "-" + fmies + "-" + fdzien; printf( folder.c_str() ); } } } } closedir( sciezka ); printf( "\n\nKoniec folderu!\n" ); } else { printf( "\n\nZawartosc folderu jest pusta!!!\n" ); } getch(); return 0; }
Program wykonuje się cały, ale na koniec po zamknięciu następuje CRASH i to nie ważne czy działa pod konsolą czy okienkami Windows? -co może być przyczyną? |
|
karambaHZP |
» 2017-05-29 20:01:52 Użyj debuggera. Błąd może być w closedir( sciezka ); |
|
AJOT74 Temat założony przez niniejszego użytkownika |
» 2017-05-29 21:13:50 Nie, mam podobną procedurę która działa prawie w identyczny sposób i ona nie powoduje błędu. Bardziej podejrzewam błąd w tym: sprintf(( char * ) rok.c_str(), "%d", danex.wYear ); sprintf(( char * ) mies.c_str(), "%d", danex.wMonth ); sprintf(( char * ) dzien.c_str(), "%d", danex.wDay );
-podejrzewam w tym gdyż w tej innej procedurze niema takiego konwertowania zmiennych i wszystko działa OK. Nie wiem w czym problem, może przed wyjściem powinienem zwolnić jakieś zasoby pamięci, może powinienem w inny sposób konwertować zmienne. Nie mam pojęcia bo niby wszystko ok a po zakończeniu programu wyskakuje błąd APPCRASH. |
|
1aam2am1 |
» 2017-05-29 21:18:18 Tak się nie robi konwertowania zmiennych do string. Piszesz po nie swojej pamięci więc się niedziw że jest crash. Zadeklaruj tablice charow i do niej konwertuj zmienne a następnie z tej tablicy do stringa. |
|
AJOT74 Temat założony przez niniejszego użytkownika |
» 2017-05-29 21:25:56 Może jakaś podpowiedź w kodzie? -bo jestem początkujący i jeżeli chodzi o assembler to bym to zrobił a C++ na razie to jeszcze wszystkiego nie łapę.
|
|
1aam2am1 |
» 2017-05-29 22:13:23 char tab[ 10 ]; sprintf( tab, "%d", danex.wYear ); rok = tab;
|
|
AJOT74 Temat założony przez niniejszego użytkownika |
» 2017-05-30 18:11:18 O dzięki Ci dobry człowieku, przy okazji załapałem o co chodzi z tym CHAR bo do tej pory to cały czas miałem upór, że to wartość od -128 do 128 i nie wiedziałem, że funkcja może pracować na zasadzie tablicy którą potem można załadować do STRING. |
|
« 1 » |