сделать функцию malloc не работает правильно? - PullRequest
1 голос
/ 08 ноября 2019

Привет, я написал простой malloc и бесплатную функцию. Идея в основном из "языка программирования Си". Теперь у меня есть проблема, как если бы я Malloc 3 раза, и я освобождаю его в том же порядке. Мой allocp близок к концу, но вся память свободна. Я дам вам мой пример сейчас. Моя проблема с 3 свободами. Например, когда я освобождаю 4, 3, 2, это нормально, потому что вы освобождаете allocp в правильном порядке, но я не знаю, как решить мою проблему.

Есть идеи?

Спасибо за помощь:)

#include "mystdlib.h"
#include <stdio.h>
#define ALLOCSIZE 1048576 /* Groeße des verfuegbaren Speichers */

static char allocbuf[ALLOCSIZE]; /* Speicher fuer mymalloc */
static char *allocp = allocbuf; /* next free position */

void *mymalloc(size_t size) {
    if(allocp + size <= allocbuf + ALLOCSIZE) {
        allocp += size;
        return (allocp - size);
    }
    else {
        return NULL;
    }

}

void myfree(void *ptr) {
    if(ptr >= (void*)allocbuf && ptr < (void*)allocbuf + ALLOCSIZE) {
        allocp = ptr;
    }
}

int main(){
    char *buf1 = mymalloc(900000);
    if (buf1 == NULL) {
        printf("Error 404, allocated memory not found...\n");
        return -1;
    }
    myfree(buf1);

    char *buf2 = mymalloc(500000);
    char *buf3 = mymalloc(400000);
    char *buf4 = mymalloc(300000);

    if (buf2 == NULL || buf3 == NULL) {
        printf("Fix your mymalloc!\n");
        return -1;
    }

    if (buf4 == NULL) {
        printf("This was supposed to happen. Very good!\n");
    } else {
        printf("Nope. That's wrong. Very wrong.\n");
        return -1;
    }

    myfree(buf2);
    myfree(buf3);
    myfree(buf4);

    char *buf5 = mymalloc(900000);
    if (buf5 == NULL) {
        printf("You got so far, but your error free journey ends here. Because an error occured.\n");
        return -1;
    }

    char *buf6 = myrealloc(buf5, 500000);
    myfree(buf6);

    printf("Congrats, you passed all tests. Your malloc and free seem to work\n");
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...