#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, 我不想在主要免费写, 此源代码包含免费的, 这个程序崩溃了
有没有人有想法?
答案 0 :(得分:2)
我认为你的方法的主要问题是你实际上在你的create
函数中返回一个Mage结构,而不是指向Mage结构的指针。
这意味着main
中的Mage gandalf实际上与create
中malloc分配的Mage的地址不同。
如果相反你会在create
中返回Mage(意思是地址),然后将gandalf声明为Mage *(指向Mage结构的指针),那么你可以直接使用gandalf(不带&amp;)在print
和delete
函数中,它将引用您最初在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;
}