Probleme mit fwrite



  • Hallo. Ich habe da ein paar Probs mit fwrite. Ich muss leider gestehen, dass ich mich nicht 100% mit C++ auskenne. Ich muss Daten in eine Datei speichern. Dazu nutze ich fwrite. Soweit kein Problem. Doch sobald meine Datei mehr als 120 Zeichen speichern soll, stürzt mein Programm ab. Und zwar mit folgender Meldung:

    "Eine nicht behandelte Ausnahme des Typs 'System.NullReferenceException' ist in RS232 W32.exe aufgetreten.

    Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

    Im Debug-Modus öffnet mein Compiler dann eine Datei namens _file.c und zeigt auf folgenden Block:

    "void __cdecl _lock_file (
    void pf
    )
    {
    /

    * The way the FILE (pointed to by pf) is locked depends on whether
    * it is part of _iob[] or not
    */
    if ( (pf >= (void *)_iob) && (pf <= (void )(&_iob[_IOB_ENTRIES-1])) )
    /

    * FILE lies in _iob[] so the lock lies in _locktable[].
    */
    _lock( _STREAM_LOCKS + (int)((FILE )pf - _iob) );
    else
    /

    * Not part of _iob[]. Therefore, *pf is a _FILEX and the
    * lock field of the struct is an initialized critical
    * section.
    */
    EnterCriticalSection( &(((_FILEX *)pf)->lock) );
    }

    "

    Kann mir jemand erklären, was da los ist, und was ich machen muss, dass dieser Fehler nicht auftritt?



  • Hi,

    zeig uns mal die Stelle wo du fwrite aufrufst.
    Code Tags nicht vergessen..



  • Würde sage dein FILE pointer ist nicht initialisiert, oder du hast irgendwo einen Bufferoverflow. Kann man aber leider nicht erkennen da du ja keinen eigenen code gepostet hast.
    Kurt



  • HI !

    wenn ich fwrite benutze mach ich das immer so:

    fwrite(pcText, sizeof(char), strlen(pcText), fOut);
    

    pcText ist hier ein char* !!
    und fOut = FILE*

    gruß __stdcall*



  • So, hier mal meine Funktion:

    int FPGA_Export(char *Dateiname)
    {
    	int Adresse,zeichen=0;
    
    	for (Adresse=MIN_ADR; Adresse<=MAX_ADR; Adresse++)
    	{
    		if (FPGA_auslesen_EM(Adresse)==1) //Liest einen FPGA ine einer
                                                      //Digitalschaltung aus.
    		{
    			return 1;
    		}
    /*Die Variable cAdresse enthält eine Adresse in Form eines Charakters (zb. 0019)/*
    		bigInhalt[zeichen]=cAdresse[0]; //Speichert 1.Zeichen aus   
                                                    //cAdresse in bigInahlt.
    		zeichen++;                      //Erhöht Zeichen um eins
    		bigInhalt[zeichen]=cAdresse[1];
    		zeichen++;
    		bigInhalt[zeichen]=cAdresse[2];
    		zeichen++;
    		bigInhalt[zeichen]=cAdresse[3];
    		zeichen++;
    		bigInhalt[zeichen]=' ';        //Fügt ein Leerzeichen nach der 
                                                   //Adresse ein.
    		zeichen++;
    
    		for (int j=0; j<2; j++) //Die zu speichernden zahlen sind zwei 
                                            //HEX-Werte. (Z.B. 0F)
    		{
    			bigInhalt[zeichen]=cBit[j]; //Speichert Zeichen an 
                                                        //Stelle in bigInhalt
    			zeichen++;
    		}
    		bigInhalt[zeichen]=' ';   //Leerzeichen einfügen.
    		zeichen++;
    
    	}
    	FILE *fp;
    	fp=fopen (Dateiname,"w"); //Dateiname ist Variable, mit SaveFileDialog 
                                      //ermittelt
    	fwrite (bigInhalt , 1 , zeichen , fp); //HIER GIBTS DEN FEHLER!!!!
    	fclose (fp);
    
    	return 0;
    }
    

    <edit>Bitte Code-Tags verwenden!</edit>


Anmelden zum Antworten