c在自己的功能中自由编程

时间:2017-01-28 18:00:10

标签: c struct free

#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, 我不想在主要免费写, 此源代码包含免费的, 这个程序崩溃了

有没有人有想法?

2 个答案:

答案 0 :(得分:2)

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

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

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

如果不清楚,如果你一直在阅读C教程,我相信你应该重读章节指针。

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

答案 1 :(得分:0)

#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;
}