注册 登录
编程论坛 VC++/MFC

这个程序总是有内存错误,高手帮看下

jiansilang 发布于 2011-03-08 08:29, 474 次点击
#include <iostream>
#include <sstream>
#include <time.h>
using namespace std;

class jockgame
{
public:
    jockgame();
    void newjock();
    void xipai();
    void printjock();
private:
    string jock[52];      

};
jockgame::jockgame()
{   
    char a[4]={3,4,5,6};
    string b[13]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
    int n=0;   
    for(int i=0;i<4;i++)
        for(int j=0;j<13;j++)
        {
           
            jock[n]=a[i]+b[j];            
            n++;            
        }
}
void jockgame::printjock()
{   
    for(int i=0;i<52;i++)
        cout<<jock[i]<<"  ";
        if(i%12==0)
            cout<<endl;
    cout<<endl<<endl<<endl;
}
void jockgame::xipai()
{
    srand(time(0));
    int n;
    string s;
    for(int i=0;i<52;i++)
    {
        n=rand()%52+1;                  //这个地方有问题,是不是随机函数调用的太多了?
        s=jock[i];
        jock[i]=jock[n];
        jock[n]=s;      
    }
}

void main()
{
    jockgame jock;
    jockgame();   
    jock.printjock();   
    jock.xipai();
    jock.printjock();   

}


[ 本帖最后由 jiansilang 于 2011-3-9 12:08 编辑 ]
5 回复
#2
我是菜鸟哦2011-03-08 11:00
string s;
是什么,是CString s吧
而且还没有头文件
#3
hellovfp2011-03-08 12:21
内存倒是没有在VC6里出错,多运行几次这个错误才会出现。
经过跟踪发现是n = 52的时候,数据越界了。怎么改自己思考一下吧。
#4
hellovfp2011-03-08 12:24
当有随机数参加计算的时候,打印一下取得的随机数,你会有意想不到的收获。
#5
jiansilang2011-03-08 14:47
回复 3楼 hellovfp
谢谢
#6
wanglewili2011-03-25 13:43
n值别加1
1