000
26.11.2010, 10:31 Uhr
~Muh_Q
Gast
|
Hallo Leute!
ich hoffe ihr könnt mir helfen. Ich schreibe mir grade ein Tool für die Arbeit ,die Nummernkreise prüft und die Lücken anzeigen soll. Das Auslesen klappt eigentlich soweit, nun wollte ich jedoch die ausgelesen Werte in einer Klasse speichern und später weiter verarbeiten. Durch die Rekursion scheint es aber Probleme zu geben. Die Klasse übergebe ich via Call-by-reference... Ergebnis: Stack-Overflow. Ohne Klasse im übergabeparameter wurden mir auch alle Dateien angezeigt!
Bin halt kein gelernter Programmierer, hoffe ihr könnt helfen:
Programmiert wird unter: Microsoft Visual Studio 2008 Professional Edition
C++: |
// [22.10.2010] Archive Check.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung. //
#include "stdafx.h" #include<windows.h> #include <sstream> #include <iostream> #include <cstring> #include <string> #include <tchar.h>
using namespace std;
//########## KLASSEN #################################### class DB { private:
int AGU_count, ARX_count, ARE_count, AGU_count_toosmall, ARX_count_toosmall, ARE_count_toosmall, AGU_toosmall[10000], ARE_toosmall[10000], ARX_toosmall[10000], AGU[10000000], ARE[10000000], ARX[10000000]; public: void set_are(int tmp); void set_agu(int tmp); void set_arx(int tmp); void set_are_toosmall(int tmp); void set_agu_toosmall(int tmp); void set_arx_toosmall(int tmp); int teile(int *Array,int links ,int rechts); void quicksort(int *Array, int links, int rechts); void sortieren(); void init(void); };
void DB::init(void) { AGU_count=0; ARX_count=0; ARE_count=0; AGU_count_toosmall=0; ARX_count_toosmall=0; ARE_count_toosmall=0; for (int i=0;i<10000000;i++) { AGU[i]=0; ARX[i]=0; ARE[i]=0; } for (int i=0;i<10000;i++) { AGU_toosmall[i]=0; ARE_toosmall[i]=0; ARX_toosmall[i]=0; } }
void DB::set_are(int tmp) { ARE[ARE_count]=tmp;ARE_count++; } void DB::set_agu(int tmp) { AGU[AGU_count]=tmp;AGU_count++; } void DB::set_arx(int tmp) { ARX[ARX_count]=tmp;ARX_count++; }
void DB::set_are_toosmall(int tmp) { ARE_toosmall[ARE_count_toosmall]=tmp;ARE_count_toosmall++; } void DB::set_agu_toosmall(int tmp) { AGU_toosmall[AGU_count_toosmall]=tmp;AGU_count_toosmall++; } void DB::set_arx_toosmall(int tmp) { ARX_toosmall[ARX_count_toosmall]=tmp;ARX_count_toosmall++; }
int DB::teile(int *Array,int links ,int rechts) { int i,j,pivot,temp; i=links; j=rechts-1; pivot=Array[rechts]; do{ while(Array[i]<=pivot && i<rechts) {i++;} while(pivot<=Array[j] && j>links) {j--;} if (i<j) { //Variablen Tauschen [START] temp=Array[i]; Array[i]=Array[j]; Array[j]=temp; //Variablen Tauschen [ENDE] } }while(i<j);
//Variablen Tauschen [START] temp=Array[i]; Array[i]=Array[rechts]; Array[rechts]=temp; //Variablen Tauschen [ENDE]
return i; }
void DB::quicksort(int *Array, int links, int rechts) { int teiler; if (links<rechts) { teiler=teile(Array,links,rechts); quicksort(Array,links,teiler-1); quicksort(Array,teiler+1,rechts); } }
void DB::sortieren() { quicksort(ARE,0,ARE_count); quicksort(AGU,0,AGU_count); quicksort(ARX,0,ARX_count); quicksort(ARE_toosmall,0,ARE_count_toosmall); quicksort(AGU_toosmall,0,AGU_count_toosmall); quicksort(ARX_toosmall,0,ARX_count_toosmall); }
//########## KLASSEN ENDE ####################################
void search_files(wchar_t input[],DB &db) {
wchar_t path[41]; wchar_t path_tmp[41];
lstrcpy(path,input); lstrcat(path,L"*");
HANDLE fHandle; WIN32_FIND_DATA wfd;
fHandle=FindFirstFile(path,&wfd);
do { // Eintrag nur behandeln, wenn es nicht . oder .. ist (werden nur bei Unterverzeichnissen mit zurückgeliefert) // hier könnte man z.B. auch mit lstrcmp auf . und .. vergleichen, was allerdings nicht ganz so effizient ist if (!( (wfd.cFileName[0]=='.') && ( (wfd.cFileName[1]=='.' && wfd.cFileName[2]==0) || wfd.cFileName[1]==0 ) )) { if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { lstrcpy(path_tmp,input); lstrcat(path_tmp,wfd.cFileName); lstrcat(path_tmp,L"\\"); wcout<<"[D]..."<<path_tmp<<endl; search_files(path_tmp,db); } else {
//Logik für Dateien
} } } while (FindNextFile(fHandle,&wfd)); FindClose(fHandle);
} // ############################################################################### int main() { DB db; DB* db_para; db_para=&db; db.init(); //Angabe des Pfades + Konvertiereung für die spätere Funktion int i=0; stringstream s; s<<"W:\\"; //Suchpfad wchar_t wohin[150]; while (s.str()[i]!=NULL) { wohin[i]=s.str()[i]; i++; }wohin[i]='\0';
//Ermittelt alle Dateien im Suchpfad search_files(wohin,db);
getchar(); return 0; }
|
Schonmal Vielen Dank für eure Hilfe! |