??malloc == AccessViolation??



  • Hi all,
    das ich nochmal mit einer einfach verketteten Liste ein Problem bekommen würde, hätte ich nicht gedacht...

    printf( "!" );
    while( NULL == ( aktData->next = malloc( sizeof(TAGDATA) + 10 ) ) )
    {
    	printf( "." );
    	Sleep( 25 );
    }
    printf( "?" );
    

    So sieht das aus, und genau beim 7ten reservieren(läuft in einer while schleife) gibts ne access violation!?

    typedef struct _TAGDATA{
    	char *path;
    	char *tags;
    	struct _TAGDATA *next;
    }TAGDATA;
    int main()
    {
        TAGDATA *firstData,
                *aktData;
        firstData = malloc( sizeof(TAGDATA) + 10 );
        firstData->path = NULL;
        firstData->tags = NULL;
        firstData->next = NULL;
    
        while( !feof(readFile) )
            //einlesen der "alten" Datei
        {
            //pfad einlesen
            fgets( row, sizeof(row), readFile );
            aktData->path = malloc( strlen(row)*sizeof(char) );
            strcpy( aktData->path, row );
    
            //tags einlesen
            fgets( row, sizeof(row), readFile );
            aktData->tags = malloc( strlen(row)*sizeof(char) );
            strcpy( aktData->tags, row );
    
            printf( "!" );
            while( NULL == ( aktData->next = malloc( sizeof(TAGDATA) + 10 ) ) )
            {
                printf( "." );
                Sleep( 25 );
            }
            printf( "?\n" );
    
            aktData = aktData->next; //in nächsten datensatz gehen
            aktData->path = NULL;
            aktData->tags = NULL;
            aktData->next = NULL;
        }
    
    }
    

    Die Ausgabe ist lediglich

    !?
    !?
    !?
    !?
    !?
    !
    

    Was übersehe ich?
    Ich suche schon seid 1 Stunde... Wer was findet währe nett mir nen tipp zu geben .

    MFG und danke im voraus



  • Du initialisierst aktData nicht. Außerdem reservierst du ein char zuwenig für die Strings. Du brauchst strlen() + 1, für die Terminierung.



  • Na geill..

    Danke auf jeden jetzt klappts.. Doch aktData wird auf firstData gesetzt, habe ich vergessen euch hier reinzustellen. an dem '+1' lags..

    Ja ist ja auch logisch Danke dir


Anmelden zum Antworten