问个关于内存的问题,请高手不吝赐教

chinese_ys 2006-01-19 01:12:20
这是一个显示扑克点数和花色的程序代码,编译没有问题,但运行时却提示内存错误,请高手帮忙排错!谢谢!
struct card
{
int pips;
char suit;
};
#include <iostream.h>
void assign_value(struct card *,int,char),print_value(struct card *),
extract_value(struct card *,int *,char *);
void main()
{
struct card cards[20];
for(int i=0;i<13;i++)
{
assign_value(cards+i,i+1,'c');
assign_value(cards+i+13,i+1,'d');
assign_value(cards+i+26,i+1,'h');
assign_value(cards+i+39,i+1,'s');
}
for(i=0;i<13;i++)
{
print_value(cards+i);
print_value(cards+i+13);
print_value(cards+i+26);
print_value(cards+i+39);
}
cout<<'\n';
}
void assign_value(struct card *c_ptr,int p,char s)
{
c_ptr->pips=p;
c_ptr->suit=s;
}
void extract_value(struct card *c_ptr,int *p_ptr,char *s_ptr)
{
*p_ptr=c_ptr->pips;
*s_ptr=c_ptr->suit;
}
void print_value(struct card *c_ptr)
{
int p;
char s,*name;
extract_value(c_ptr,&p,&s);
name=(s=='c')?"clubs":(s=='d')?"diamonds":(s=='h')?"hearts":(s=='s')?"spades":"error";
cout<<"card:"<<p<<" of"<<name<<endl;
}
...全文
144 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinese_ys 2006-01-19
  • 打赏
  • 举报
回复
了解了,谢谢
iamcaicainiao 2006-01-19
  • 打赏
  • 举报
回复
以下是lz的程序,木有发现什么错误,运行也正常。结果也正确。
除了发现一个扑克牌不应该是20张,应该是52张。将数组大小改成52。

struct card
{
int pips; //number 1-13
char suit; //kind c,d,h,s,
};

#include <iostream.h>

void assign_value(struct card *,int,char);
void print_value(struct card *);
void extract_value(struct card *,int *,char *);

void main()
{
struct card cards[52]; //*****52****
for(int i=0;i<13;i++)
{
assign_value(cards+i,i+1,'c');
assign_value(cards+i+13,i+1,'d');
assign_value(cards+i+26,i+1,'h');
assign_value(cards+i+39,i+1,'s');
}
for(i=0;i<13;i++)
{
print_value(cards+i);
print_value(cards+i+13);
print_value(cards+i+26);
print_value(cards+i+39);
}
cout<<'\n';
}

void assign_value(struct card *c_ptr,int p,char s)
{
c_ptr->pips=p; //give the number
c_ptr->suit=s; //give the kind
}
void extract_value(struct card *c_ptr,int *p_ptr,char *s_ptr)
{
*p_ptr=c_ptr->pips;
*s_ptr=c_ptr->suit;
}
void print_value(struct card *c_ptr)
{
int p;
char s,*name;
extract_value(c_ptr,&p,&s);
name=(s=='c')?"clubs":(s=='d')?"diamonds":(s=='h')?"hearts":(s=='s')?"spades":"error";
cout<<"card:"<<p<<" of"<<name<<endl;
}
yangyzqo 2006-01-19
  • 打赏
  • 举报
回复
struct card cards[20];
for(int i=0;i<13;i++)
{
assign_value(cards+i,i+1,'c');
assign_value(cards+i+13,i+1,'d');
assign_value(cards+i+26,i+1,'h');
assign_value(cards+i+39,i+1,'s');
}
for(i=0;i<13;i++)
{
print_value(cards+i);
print_value(cards+i+13);
print_value(cards+i+26);
print_value(cards+i+39);
}

根据这一段估计可能是数组cards访问越界了
逸学堂 2006-01-19
  • 打赏
  • 举报
回复
运行时却提示内存错误,大部分都是非法访问内存。
楼主,跟踪进去看看就知道了!
ouyh12345 2006-01-19
  • 打赏
  • 举报
回复
struct card cards[20];
assign_value(cards+i+39,i+1,'s');

访问越界

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧