Geschützter Speicher Heap



  • Nabend,

    sitze gerade an folgendem Code:

    int main (void) {
    	char *filename = NULL;
    	filename = (char*)calloc(256,sizeof(char));
    	GetFileName(filename);
    	return 0;
    }
    

    Versuch mit Hilfsvariable:

    void GetFileName (char * pFileName) {
    	char FileName = *pFileName;
    
    	printf("\nEingabe Dateiname ohne Erweiterung [ret=perlis]: ");
    	fgets(&FileName,DEF_FILE_LEN,stdin);
    
    	if (strlen(&FileName) == 1) 
    		strcpy(&FileName,DEF_FILE_NAM);
    
    	strcat(&FileName,DEF_FILE_EXT); 
    	strcpy(pFileName,&FileName);
    
    }
    

    Versuch ohne Hilfsvariable:

    void GetFileName (char * pFileName) {
    
    	printf("\nEingabe Dateiname ohne Erweiterung [ret=perlis]: ");
    	fgets(pFileName,DEF_FILE_LEN,stdin);
    
    	if (strlen(pFileName) == 1) 
    	        strcpy(pFileName,DEF_FILE_NAM);
    
    	strcat(pFileName,DEF_FILE_EXT); 
    
    }
    

    Kann dem "pFileName" keinen neuen Wert auf diesem Wege zuweisen. Mit einem pFileName = "test" hingegen funktioniert es, doch das soll es ja nicht.

    Das Problem ist, dass der Speicher geschützt ist und ich nicht weiß, wie ich dem dennoch einen Wert zuweisen kann.

    Würde mich über Anregungen freuen, wie ich das Problem beseitigen kann.

    MfG



  • Das ist aber kein C++.

    filename = (char*)calloc(256,sizeof(char));
    

    Zudem produzierst du hier nen Speicherleck. Hab kein free() dazu gefunden.



  • free hab ich noch nicht eingebunden das stimmt. Ändert an dem Problem leider nichts.

    PS: Habs auch gerade bemerkt, dass es im falschen Forum ist. Bitte dann ums verschieben.



  • close



  • Wenn "close" bedeutet, dass du dein Problem gelöst hast, dann solltest du die Lösung auch noch posten, für anderen.

    lg



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum C (C89 und C99) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten