Dateistruktur Sortierung

Tetsuya

Mitglied
Hallo
Mein Problem ist, dass das Programm nach dem Aufruf der Funktion Sort_File (Quellkode siehe unten) nicht mehr reagiert was mach ich falsch?
Auch gibt er folgende Warnung an dessen Ursache ich nicht verstehe.
EditorDlg.cpp(369) : warning C4101: 'szDummy' : Unreferenzierte lokale Variable
EditorDlg.cpp(365) : warning C4101: 'no' : Unreferenzierte lokale Variable
Generieren von Code...
EditorDlg.cpp(382) : warning C4700: Lokale Variable 'let' wurde ohne Initialisierung verwendet
Ich bin noch recht neu beim Visual C (vorher Visual Basic und normales C++)Programmieren und es wäre nett wenn mir jemand helfen könnte
schon mal Danke

ps mit der Antwort könnt ihr euch Zeit lassen kann erst morgen wieder ins Netz
Code:
void  CEditorDlg::Sort_File()
{
	char * no;
	int let;
	int m_count = 1;
	char szBuffer [MEDIUM_BUFFER+1];
	char szDummy  [MEDIUM_BUFFER];
	int flash = 0;
	int ncount;
	int i;
	float *arrnr;
	float *arre;
	int *arrno;
	FILE * stream;
	stream = fopen(m_CszDatei,"r+");


	while( fgets( szBuffer, HUGE_BUFFER, stream ) );
	{
		if ( ! let)
		{
			m_count++;
		}
		else  
		{
			if( (int)szBuffer[0]==let)
			m_count++;
		}
	}
	fclose (stream);


	arrnr = (float *) malloc(m_count);
	arre = (float *) malloc(m_count);
	arrno = (int * ) malloc (m_count);
//  versuch der Datei 
// bei gescheitert
	if( ( stream = fopen( m_CszDatei, "r+" ) ) == NULL )
	{
		AfxMessageBox ("ERROR_OPEN_FILE_READ", IDOK);
		fcloseall();
	}

//  bei erfolg
	else
	{

//  Einlesen der Testdatei ANFANG 
i=0;
		do  		
		{	
			while( fgets( szBuffer, HUGE_BUFFER, stream ) )	;
			{
				ncount = 0;
				szBuffer[MEDIUM_BUFFER] = LINE;
				while( szBuffer[ncount] != LINE ) ncount++;	// Austauschen des Zeichens
				{
					szBuffer[ncount]  = flash;					// Line Feed gegen Stringende
	
					switch (szBuffer[0])
					{
					case 'N':
						arrnr[i] = * szBuffer ;
						arrno[i] = atoi (szBuffer+3);
						break;
					case 'E':
					
						arre[i] = * szBuffer ;
						i++;
						break;
					}
				}
			}
		}while (i!=m_count);
	}
 }
 
Tetsuya hat gesagt.:
EditorDlg.cpp(369) : warning C4101: 'szDummy' : Unreferenzierte lokale Variable
EditorDlg.cpp(365) : warning C4101: 'no' : Unreferenzierte lokale Variable
=> Die genannten Variablen werden zwar deklariert, aber nicht verwendet.

Tetsuya hat gesagt.:
EditorDlg.cpp(382) : warning C4700: Lokale Variable 'let' wurde ohne Initialisierung verwendet
Du verwendest die Variable 'let', ohne ihr vorher einen Wert zu geben. Zur Erinnerung: Variablen haben in C (und C++) nach der Deklaration einen zufälligen Wert.

Weiterhin ist mir folgendes aufgefallen:


  • Du deklarierst szBuffer mit der Größe MEDIUM_BUFFER+1, liest aber immer Daten mit der Länge HUGE_BUFFER. Wenn HUGE_BUFFER > MEDIUM_BUFFER+1 dann kracht's, also dann werden Daten außerhalb von szBuffer geschrieben. Das bedeutet, daß andere Variablen, die im Speicher nach szBuffer liegen, überschrieben werden.
  • Du allokierst Speicher für arrnr, arre und arrno, gibst ihn aber danach nicht wieder frei. Wenn Du mit malloc oder calloc Speicher anforderst, mußt Du ihn auch nach Gebrauch wieder mit free freigeben. Auch dieser Speicher ist uninitialisiert.
  • while( szBuffer[ncount] != LINE ) ncount++; // Austauschen des Zeichens

    {...}

    Das while bezieht sich nur auf die Anweisung 'ncount++', nicht auf den nachfolgenden eingeklammerten Block. Ist das so beabsichtigt?
  • wenn m_count == 0 ist, dann läuft die do...while - Schleife ewig, da beim ersten Vergleich i schon 1 ist. Besser wäre: 'while(i < m_count)'
Wenn das alles behoben ist, und es hängt immer noch, dann poste nochmal.

Viele Grüße,
jokey2
 
Danke für die Hilfe.
Es Funktioniert zwar immer noch nicht ganz aber ich versuch erst noch selber was den Fehler verursacht.

gruß Tetsuya
 
Zurück