如何正确实现c malloc/realloc功能?

如何正确实现c malloc/realloc功能?,c,operating-system,kernel,systems-programming,C,Operating System,Kernel,Systems Programming,我正在编写自己的操作系统,必须实现自己的malloc realloc函数。然而,我认为我所写的可能不安全,也可能导致内存泄漏,因为变量没有真正被破坏,它的内存设置为零,但变量名仍然存在。有人能告诉我这个代码中是否有漏洞吗?该项目将在用户subado512下完成后立即添加到github 代码: 您使用由malloc返回的指针时的行为未定义:您正在返回具有自动存储持续时间的数组地址 作为一个粗略的开始,考虑使用静态< /COD> char < /Cord>数组来建模内存池,并将此段返回给调用方;建

我正在编写自己的操作系统,必须实现自己的malloc realloc函数。然而,我认为我所写的可能不安全,也可能导致内存泄漏,因为变量没有真正被破坏,它的内存设置为零,但变量名仍然存在。有人能告诉我这个代码中是否有漏洞吗?该项目将在用户subado512下完成后立即添加到github

代码:


您使用由
malloc
返回的指针时的行为未定义:您正在返回具有自动存储持续时间的数组地址

作为一个粗略的开始,考虑使用<代码>静态< /COD> <代码> char < /Cord>数组来建模内存池,并将此段返回给调用方;建立当前正在使用的数组的表。请注意,您必须在这里对对齐进行巧妙的处理,以确保返回的

void*
满足任何类型的对齐要求<代码>免费只不过是释放该表中的一条记录


请注意,典型的C运行时库使用的内存管理系统非常复杂。考虑到这一点,请务必理解,您的任务可能仅仅是一个很好的编程练习。

恐怕在您拥有真正的操作系统之前,您还有很长的路要走。您的
free()
函数并不能激发您对C理解的信心。是的,您是对的,我不知道,我开始用更高级的语言编程。因为C++才知道C。我被迫使用c,因为它是一个操作系统。希望我能使用golang或类似的东西。这段代码中有很多初学者的错误,而且大部分都没有任何意义。首先。你是用C还是C++编程?它看起来像C++字符串。主题中的自述:没有分配存储持续时间的字符数组只能被字符类型混淆。换句话说,它不能也不应该被用作任意内存。@2501:这对任何类型都是正确的。。。你打算用什么<代码>静态并集{无符号字符c;int i;long l;long-long ll;double d;long-double-ld;void*p;void(*fun)(;}数组[内存池大小]?显然应该使用分配的存储持续时间。然后您就回到了开始的位置;-)@2501 nevermind找到它(分配的对象没有声明的类型)
 void * malloc(int nbytes)
{
    char variable[nbytes];
    return &variable;
}
void * free(string s) {
    s= (string)malloc(0);
    return &s;
}

void memory_copy(char *source, char *dest, int nbytes) {
    int i;
    for (i = 0; i < nbytes; i++) {
        *(dest + i) = *(source + i);             //    dest[i] = source[i]
    }
}
void *realloc(string s,uint8_t i) {
    string ret;
    ret=(string)malloc(i);
    memory_copy(s,ret,i);
    free(s);
    return &ret;
}
    string buffstr = (string) malloc(200);
    uint8_t i = 0;
    while(reading)

    {
        buffstr=(string)realloc(buffstr,i+128);
        buffstr[i]=readinput();
    }