19. maj 2008 - 12:49Der er
5 kommentarer og 1 løsning
Lagersegmentfejl ved listning af filer/mapper i en mappe
Hej.
Sidder og roder med et program i c++ som skal scanne en mappe igennem og gøre forskellige ting med filerne i den.
Jeg har fået den til at finde alle filerne i mappen, og jeg kan også skælne dem mellem mapper og filer, men jeg for tilgængeld en lagersegmentfejl inden den når alle filerne i gennem. Jeg regner med at det enten er fordi ikke for renset ud i hukommelsen, eller fordi jeg på en eller anden måde skal have alloceret noget mere hukommelse, men er ny til c++ og kan ikke rigtigt gennemskue det, så håber i kan give mig et vink i den rigtige retning.
Koden ser således ud:
int main(int argc, char** argv) { char sti[] = "/var/log"; int antalFiler; struct direct ** filer;
antalFiler = scandir(sti, &filer, filVaelger, alphasort); cout << antalFiler << endl; for (int i = 1; i <= antalFiler; i++) { struct stat * s; string fuldeSti = "/var/log/"; fuldeSti.append (filer[i-1]->d_name); if (lstat (fuldeSti.c_str () , s) == 0) cout << "lykkes"; //cout << errno;
scandirs parameter skal rent faktisk have en dirent***, men den compiler fint så det er ikke der problemet er.
Jeg skal prøve at gøre det lidt mere specifikt. Det er enlig et meget simpelt program, i Første fase Ville jeg bare have den til at skrive alle filerne i en mappe, hvilket jeg også har fået til at virke, derefter ville jeg have den til at skrive om filerne er mapper eller filer, hvilket den så ikke vil. Koden nedenfor er den fulde kode. De udkommenterede linjer er de linjer som er tilføjet for at finde ud af om filen er en mappe eller en fil, og programmet virker uden dem, så det må være i dem problemet ligger:
/* * File: Main.cpp * Author: anders * * Created on 6. maj 2008, 12:18 */
Skal lige tilføje at det kun er de udkommenterede linjer i forløkken, linjen //runningConfig.stiDerSkalScannes = "/var/log"; har med et andet forsøg og gøre, og bliver ikke brugt endnu.
struct stat * s; // <--- Fejlen er her, der er ikke allokeret noget lager ... string fuldeSti = "/var/log/"; fuldeSti.append (filer[i-1]->d_name); if (lstat (fuldeSti.c_str () , s) == 0) // parameter 2 skal være en buffer.
Hvis du har slået den warning til der fortæller dig om uinitialiserede variable burde din compiler fortælle dig om sådanne fejl.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.