在自己的函数中自由编程

c programming free in a own function

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Mage{
    int power;
    char* name;
}typedef Mage;

void print(Mage* mage){
    printf("Mage: %s, Power: %i", mage->name, mage->power);
}

Mage create(char name[],int power){
    Mage* mage = malloc(sizeof(Mage));
    mage->power = power;
    mage->name = name;
    printf("New Mage!\n");
    return *mage;
}

void delete(Mage* mage){
    free(mage); // -> this is not working
    // how can I use free in an own function
    // I don't want to write free in main
}

int main() {

    Mage gandalf = create("Gandalf",50);
    print(&gandalf);
    delete(&gandalf);

    printf("\n\n\n");
    return 0;
}

如何在自己的函数中使用 free, 我不想在 main 中写 free, 这个源代码包含一个免费的, 该程序崩溃

有人知道吗?

我认为你的方法的主要问题是你实际上 return 在你的 create 函数中使用了一个 Mage 结构,而不是一个指向 Mage 结构的指针。

这意味着main中的Mage gandalf实际上与create中malloc分配的Mage不在同一个地址。

如果相反,您 return Mage(意思是地址)在 create 中,然后将 gandalf 声明为 Mage*(指向 Mage 结构的指针),那么您可以使用 gandalf直接(没有 &)在你的 printdelete 函数中,它会引用你最初在 create 中分配的同一个法师。

如果不清楚,如果您一直在阅读 C 教程,我相信您应该重新阅读章节提示。

希望对您有所帮助,祝您好运:)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Mage{
    int power;
    char* name;
}typedef Mage;

void print(Mage* mage){
    printf("Mage: %s, Power: %i", mage->name, mage->power);
}

Mage* create(char name[],int power){
    Mage* mage = malloc(sizeof(Mage));
    mage->power = power;
    mage->name = name;
    printf("New Mage!\n");
    return mage;
}

void delete(Mage* mage){
    free(mage);
}

int main() {

    Mage *gandalf = create("Gandalf",50);
    print(gandalf);
    delete(gandalf);

    printf("\n\n\n");
    return 0;
}