Ein Fehler

Tetsuya

Mitglied
Hallo
Ich hab da ein kleines Problem. Beim Compelieren meldet er zwar keinen Fehler .
Aber wenn ich das Programm laufen lasse und eine Funktion mit einem Button ausführe beendet das Programm sofort es sei den ich fülle vorher eine Listbox dann kommt folgendes:
Debug Assertion failed!
Program:...\Debug\Editor.exe
File fgets.
Line 60
Expression:str != NULL

Die einzigen Zeilen die ich mit fgets habe sind folgende:
while( fgets( szBuffer, MEDIUM_BUFFER, stream ) )
while (fgets( szBuffer, HUGE_BUFFER, stream ))
while ( fgets (szTemp,HUGE_BUFFER,stream) )
Deklarationen:
#define MEDIUM_BUFFER 100
#define HUGE_BUFFER 200
CString szBuffer;
CString szTemp;

Ich hab keine Ahnung was der mir damit sagen will und erst recht nicht weiß ich warum er das Programm abbricht wäre nett wenn mir einer Helfen würde.
Ein Anhaltspunkt würde mir auch schon helfen.

gruß Tetsuya
 
Wenn ich mal wild durh die Gegend schätzen darf, würde ich meinen ein Dateizeiger ist NULL..

Mal ganz davon abgesehen was das :

Code:
while( fgets( szBuffer, MEDIUM_BUFFER, stream ) )
while (fgets( szBuffer, HUGE_BUFFER, stream ))
while ( fgets (szTemp,HUGE_BUFFER,stream) )
ist ?!

Sollte man nicht zwischendurch mal auf "feof(...)" also "end of File" prüfen ?

M.f.G: Erik
 
fgets und CString vertragen sich nicht. Bei fgets kannst du wirklich nur char* verwenden. Du könntest allerdings CString::GetBuffer verwenden.

EriFo: fgets gibt am Ende des Files NULL zurück.
 
Hi
Danke füe die Hilfe das Problem mit dem datenzeiger ist weg.
Aber dennoch beendet er das Programm selbst in einem Abschnitt.
An einer anderen Stelle sagt er mir, dass der vorgang read nicht auf den Speicher durchgeführt werden kann.
Weiß einer was das für Ursachen haben kann Ich bin mit meinem Latein am ende.

gruß Tetsuya
 
Zeig mal den Ausschnitt bei dem er jetzt abstürzt.
vorgang read lässt auf einen ungültigen Pointer schliessen.
 
Danke
Ok den unzulässigen Pointer hab ich jetzt gefunden.
(Mit kleinen schritten näher ich mich dem Ziel)
Hier ist der Bereich in dem er abstürzt:
Deklarationen:
Code:
#define MEDIUM_BUFFER 100

typedef struct  datenfeld
  {

	int			nNo;	//int variable für die Testschritt nr. 
	CString		szNO;	// Testschritt Nr.
}
	m_arrnr = (long *) malloc( m_count * sizeof(m_arrnr) );
	m_arre = (long *) malloc(m_count * sizeof(m_arre) );
	m_arrno = (int * ) malloc (m_count * sizeof(m_arrno) );
char szBuffer [MEDIUM_BUFFER+1];

				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':
						m_arrnr[i] = * szBuffer ;	// Anfangsadresse des Datenfeldes
						m_arrno[i] = atoi (szBuffer+3); // Nr. wird vom Feld eingelesen 
						datfeld[i]->szNO = szBuffer;	// gesamte Zeile wird im Datenfeld gespeichert
						break;
}
}


Ich muss jetzt auch leider weg kann erst morgen früh wieder kommen.
Bin schon spät dran.

hoffe ihr könnt mir Helfen
schönen Tag noch und bis Morgen
Tetsuya
 
Der Abschnitt kommt mir verdächtig für:

m_arrnr = (long *) malloc( m_count * sizeof(m_arrnr) );
m_arre = (long *) malloc(m_count * sizeof(m_arre) );
m_arrno = (int * ) malloc (m_count * sizeof(m_arrno) );

sizeof wird hier immer die Grösse eines Pointers zurückgeben, ist das so gewollt?

Sonst fehlen leider zuviele Dinge, um mehr zu sagen:

Was ist i, wo ist es deklariert?
Prüfst du in der while-Schleife, ob ncount eventuell über den Puffer rausliest?
 
Endurion hat gesagt.:
fgets und CString vertragen sich nicht. Bei fgets kannst du wirklich nur char* verwenden. Du könntest allerdings CString::GetBuffer verwenden.

EriFo: fgets gibt am Ende des Files NULL zurück.
Man könnte auch std::vector<char> verwenden, aber das ist ein bischen kniffliger. Wer sich dafür interessiert, kann bei Scott Meyers (meinem persönlichen C++-Guru) nachschlagen, oder mich fragen. Ich gebe dann allerdings nur wieder, was ich bei Meyers gelernt habe. Aber das ist recht informativ.
 
Moin da bin ich wieder.
Also durch welche Zeilen das Programm abgestürzt ist weiß ich jetzt.
Aber ich verstehe es nicht.
i ist übrigens eine integer lauf Variable. am ende wird sie erhöht
Ich hab folgendes verändert: (Die zeile ncount++ ist eine Zeile weiter unten)*ratlos**kopfkratz*

ncount = 1;
szBuffer[MEDIUM_BUFFER] = LINE;
while( szBuffer[ncount] != LINE )
{


szBuffer[ncount] = flash; // Line Feed gegen Stringende
ncount++; // Austauschen des Zeichens
switch (szBuffer[0])

Und was kann es bedeuten wenn jetzt die Debug Assertion Failed Fehlermeldung kommt,
mit der angabe File afx.inl
Ach ja und kann mir einer nen Tipp geben wie ich in Visual C++ zu den Zeilenangaben der Fehlermeldung komme?
Vielleicht hat da einer Ahnung, wäre nett wenn er mich einweihen könnte.

gruß Tetsuya
 

Neue Beiträge

Zurück