#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;
}我如何在自己的函数中使用免费,我不想写免费的主,这个源代码包含一个免费的,这个程序崩溃
有谁有主意吗?
发布于 2017-01-28 18:10:39
我认为这里的方法的主要问题是,您实际上是在返回create函数中的Mage结构,而不是指向Mage结构的指针。
这意味着,main中的法师甘道夫实际上与create中malloc分配的法师的地址不同。
如果您将返回create中的Mage (即地址),然后声明甘道夫为法师*(指向法师结构的指针),那么您可以在您的print和delete函数中直接使用gandalf (没有&),它将引用您在create中分配的相同的法师。
如果不清楚,我相信如果您一直在阅读C教程,您应该重新阅读章节指南。
希望这能帮上忙,祝你好运
发布于 2017-01-28 18:16:30
#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;
}https://stackoverflow.com/questions/41912998
复制相似问题