我无法调试我的程序。由于一些奇怪的原因,我无法在链接列表中打印订阅的价值。
/*Player.h
#ifndef PLAYER_H
#define PLAYER_H
class Player
{
double subscription; /*value to be stored*/
public:
Player(); /*default constructor*/
Player(double); //double
~Player();
double getSubscription(){ return subscription; }
};
#endif
答案 0 :(得分:1)
看起来您的问题出现在SoccerClub.cpp上:
player = &Player(subscription); /*store the subscription into player using the constructor*/
这是创建一个Player对象并将该对象的地址分配给指针 player ,但是在完整表达式的末尾(通过下一行),此对象超出范围并且被毁坏了。这不是使用您之前使用malloc分配的内存。
删除malloc并使用:
player = new Player(subscription);
请确保稍后再调用 delete 来销毁此对象并释放内存。
答案 1 :(得分:-2)
我在以下行(SoccerClub::AddPlayer
)中看到了几个问题:。
player = &Player(subscription); /*store the subscription into player using the constructor*/
您正在存储指向函数本地对象的指针。一旦函数返回,指针将成为悬空指针。
您刚从之前使用的malloc
电话中泄露了内存
为玩家分配记忆。
我看到的其他问题。
您正在使用malloc
为对象分配内存。这不会正确初始化对象。构造函数不会被调用。您必须通过调用new
替换它们。
E.g。
替换
player = (struct Player *) malloc(sizeof(struct Player));
通过
player = new Player(...); // No need to use struct Player, just Player
// Provide the right arguments to the constructors
替换
temp = (struct Link *) malloc(sizeof(struct Link)); /*allocate memory*/
通过
temp = new Link(...); // No need to use struct Link, just Link
// Provide the right arguments to the constructors