在自己的函数中自由编程

ek926m
#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,此源代码包含free,此程序会崩溃

有人有主意吗?

乌托邦

我认为这里方法的主要问题是实际上您在函数中返回了Mage结构create,而不是指向Mage结构的指针。

这意味着Mage gandalf inmain实际上与malloc in中分配的Mage不处于同一地址create

如果改为在中返回Mage(表示地址)create,然后将gandalf声明为Mage *(指向Mage结构的指针),则可以在printanddelete函数中直接使用gandalf(不带&),它将引用与您create最初分配的法师相同

如果不清楚,我相信如果您一直在阅读C教程,则应该重新阅读各章的指针。

希望这会有所帮助,祝你好运:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章