Array füllen



  • folgendes Problem:
    ich habe ein int pointer (int *pointer[1000]), den ich in einer Schleife füllen will. Diese Schleife soll insgesamt 100 mal durchlaufen und dabei das Array jedes Mal von 1 bis 1000 füllen, Desweiteren soll jedes Mal vor der Füllung des Arrays Speicher allokiert und danach wieder freigegeben werden. Ich habe das schon versucht, was mir aber nicht richtig gelingen wollte.
    So mein Anfang:

    int *pointer[1000],n=0, k=0;
    for(n;n<100;n++)
    {
        for(k;k<100;k++)
        {
            pointer[k] =(int *)malloc(sizeof(k)); 
            pointer[k]=(k+1);
            free(pointer[k]);
        }
    }
    

    So geht das nicht... wer kann mir helfen? Im prinzip will ich nur herausbekommen, ob es klappt desöfteren Speicher zu allokieren, das Array zu füllen, und anschließend den Speicher wieder freizugeben ohne dass nach einiger Zeit ein MemoryLeak entsteht.
    Danke im Voraus
    Mfg karell



  • Ein kleiner Rechenfehler:

    100 * 100 != 1000

    🙂



  • AJ schrieb:

    Ein kleiner Rechenfehler:

    100 * 100 != 1000

    🙂

    Ja, sorry. Die zweite Schleife wollte ich 1000 mal durchlaufen. Wenn ich diese 1000mal durchlaufen habe (und das Array gefüllt ist), dann soll der Speicher des Arrays wieder freigegeben werden, und das Array aufs neue gefüllt werden. So wie ich das habe klappt das gar nicht oder? Ich muss bestimmt vot der 2.Schleife den Speicher allokieren und danach erst freigeben, oder??



  • Ich verstehe noch nicht ganz auf was du eigentlich hinaus willst...



  • ich habe so einige probleme mit meinem Rechner und wollte mal die speicherverwaltung prüfen. Denn bei vielen Programmen die ich schreibe entsteht ein dickes leak.
    deshalb wollte ich einfach mal eine kleine Fkt. haben, welche meinetwegen zuerst mit einem int-Array getestet wird und später mit einem char-array.
    Deshalb habe ich jetzt ein array:

    int *pointer[1000];
    

    für dieses array möchte ich jetzt irgendwie eine schleife schreiben, die für dieses array speicher allokiert, dann das array irgendwie füllt (jetzt noch mit int, später mit char), dann den bereits verwendeten Speicher wieder frei gibt, und zu guterletzt damit wieder von vorne anfängt. Diese Prozedur soll so ca. 100mal durchlaufen, einfach mal um zu sehn, ob das mit dem Speicher allokieren und wieder freigeben funktioniert.
    PS: Der Pointer muss nicht unbedingt die 1000 haben, kann auch irgendwie dynamisch gemacht werden.



  • Kann mir nicht vorstellen, dass free() nicht funktionieren sollte. Vielleicht liegt es an anderen Programmen bzw. Diensten, die du laufen hast. 😕



  • ja, denke auch dass das funktionieren wird. Aber kannst du (@AJ)mir nicht trotzdem mal irgendwie zu einer Fkt. helfen, mit der ich meinen Speicher mal füllen kann, dann wieder freigeben und anschließend noch mal füllen. Ich will das mal bildlich vor mir haben, wenn ich z.B. eine Schleife 2Mio. mal durchlaufen würde, dabei immer wieder ein array fülle und das dann wieder freigebe... und letztendlich darf der zugesicherte Speicher (im taskmanager sichtbar) trotzdem nicht zu sehr steigen, bzw. gar nicht steigen...
    Hoffe mir kann jmd. helfen



  • machs doch einfach so

    while(true){
    char *tmp=malloc(1000000);
    //hier einen Sleep reinpacken je nachdem welches os du verwendest...
    free(tmp);
    //hier einen Sleep reinpacken je nachdem welches os du verwendest...
    }
    

    dann solltes du sehen können wie dein speicher ständig zu und abnimmt


Anmelden zum Antworten