#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结构的指针),则可以在print
anddelete
函数中直接使用gandalf(不带&),它将引用与您create
最初分配的法师相同。
如果不清楚,我相信如果您一直在阅读C教程,则应该重新阅读各章的指针。
希望这会有所帮助,祝你好运:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句