C++关于敲代码时遇到的一个与new有关问题

刚刚在敲代码的时候遇到一个问题,我定义了一个头文件,代码如下

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文件中我只是声明了结构指针,但并没有把这两个指针指向地址的原因)但我仍不清楚这其中问题的原理,希望有大佬能够指点一二,小弟不胜感谢!

发布了10 篇原创文章 · 获赞 6 · 访问量 880

猜你喜欢

转载自blog.csdn.net/WildSky_/article/details/103823448