刚刚在敲代码的时候遇到一个问题,我定义了一个头文件,代码如下
typedef struct _prop
{
int id;
char* name; //商品名
double price; //商品单价
int stock; //商品库存
char* desc; //商品描述
}Prop;//商品
typedef struct _player
{
int id; //玩家编号
char* name; //用户名称
char* password; //用户密码
Bag bag; //玩家背包
double gold; //玩家金钱
double sysee; //玩家元宝
}Player;
void Initdate(Prop* props,Player* players)
{
props = new Prop[5];//开辟num个Prop结构的内存空间(问题代码)
players = new Player[5];//开辟num个Player结构的内存空间(问题代码)
int i = 0;
for (int j = 0; j < 5; j++)
{
(props + j)->id = j + 1;
}//初始化物品id
for (int j = 0; j < 5; j++)
{
(players + j)->id = j + 1;
}//初始化玩家id
//初始化物品属性
(props + i)->name = "双倍经验卡";
(props + i)->desc = "经验加成";
(props + i)->price = 3000.0;
(props + i)->stock = 10;
i++;
(props + i)->name = "幸运宝石";
(props + i)->desc = "幸运道具";
(props + i)->price = 5000.0;
(props + i)->stock = 20;
i++;
(props + i)->name = "五行转换卡";
(props + i)->desc = "五行转换";
(props + i)->price = 5000.0;
(props + i)->stock = 20;
i++;
(props + i)->name = "银两袋子";
(props + i)->desc = "银两";
(props + i)->price = 10000.0;
(props + i)->stock = 20;
i++;
(props + i)->name = "高级灵珠宝箱";
(props + i)->desc = "高级灵珠";
(props + i)->price = 100000.0;
(props + i)->stock = 50;
i = 0;//重新将i初始化
//初始化玩家属性
/*
int id; //玩家编号
char* name; //用户名称
char* password; //用户密码
Bag bag; //玩家背包
double gold; //玩家金钱
double sysee; //玩家元宝
*/
(players + i)->name = "野满横江";
(players + i)->gold = 11111111.00;
(players + i)->password = "admin";
(players + i)->sysee = 11111111.00;
i++;
(players + i)->name = "野";
(players + i)->gold = 22222222.00;
(players + i)->password = "admin";
(players + i)->sysee = 22222222.00;
i++;
(players + i)->name = "满";
(players + i)->gold = 33333333.00;
(players + i)->password = "admin";
(players + i)->sysee = 33333333.00;
i++;
(players + i)->name = "横";
(players + i)->gold = 44444444.00;
(players + i)->password = "admin";
(players + i)->sysee = 44444444.00;
i++;
(players + i)->name = "江";
(players + i)->gold = 55555555.00;
(players + i)->password = "admin";
(players + i)->sysee = 55555555.00;//初始化玩家数据
//ShowProps(props);
return ;
}
void ShowProps(Prop* props)
{
if (props != NULL)
{
std::cout << "编号\t名称\t单价\t库存\t商品介绍" << std::endl;
for (int i = 0; i < 5; i++)
{
std::cout << (props + i)->id << "\t" << (props + i)->name << "\t" << (props + i)->price << "\t" << (props + i)->stock << "\t" << (props + i)->desc << std::endl;
}
}
}
然后我尝试用main函数调用它,代码如下
#include <iostream>
#include "shop.h"
//int PropCount = 0;
//int PlayerCount = 0;
Prop* props;//物品
Player* players;//玩家
int main()
{
Initdate(props, players);//初始化数据
ShowProps(props);
return 0;
}
正常情况下应该运行后能够正确打印出初始化的数据,但代码运行后直接就返回0了,我猜测是props的地址指向了NULL,调试后发现确实是这样,但我依然不清楚这个问题出现在哪里,我尝试在Initdate函数的内部调用ShowProps函数,运行后发现数据可以正常打印出来。根据这样的情况,我猜测也许是指针的传递问题,但又经过一系列的调式后发现,原来是两段new代码的问题,于是我将这两行代码直接剪切到main函数的头两行后,发现问题解决了,(猜测可能是cpp文件中我只是声明了结构指针,但并没有把这两个指针指向地址的原因)但我仍不清楚这其中问题的原理,希望有大佬能够指点一二,小弟不胜感谢!