首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C在自己的函数中自由编程

C在自己的函数中自由编程
EN

Stack Overflow用户
提问于 2017-01-28 18:00:09
回答 2查看 96关注 0票数 1
代码语言:javascript
复制
#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;
}

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

有谁有主意吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-28 18:10:39

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

这意味着,main中的法师甘道夫实际上与create中malloc分配的法师的地址不同。

如果您将返回create中的Mage (即地址),然后声明甘道夫为法师*(指向法师结构的指针),那么您可以在您的printdelete函数中直接使用gandalf (没有&),它将引用您在create中分配的相同的法师。

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

希望这能帮上忙,祝你好运

票数 2
EN

Stack Overflow用户

发布于 2017-01-28 18:16:30

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41912998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档