写了一个关于内存的C++小程序,有有关问题,各位帮忙看下
写了一个关于内存的C++小程序,有问题,各位帮忙看下
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
#define BYTE unsigned char
class parket
{
public:
parket();
~parket();
void increaseNO(int);
void setparket(int);
int getNO();
int getparket();
private:
int add; //和值
static int n;
int parketNo;
};
int parket::n=0;
parket::parket()
{
add=0;
parketNo=n;
}
parket::~parket(){}
void parket::increaseNO(int step) //报头的编号增加函数
{
parketNo+=step;
}
void parket::setparket(int parkdata) //设置包中的内容
{ //int i;
//for(i=0;i <192;i++)
//{
add=parkdata;
//}
}
int parket::getNO() //获取报头编号
{
return parketNo;
}
int parket::getparket() //获取处理好的包
{
return add;
}
void main()
{ char YN;
int i,j,k;
int b[10];
parket add[5];
int a1=1;
int *pbuf=new int[0x100000];
memset(pbuf,0,0x100000);//初始化buffer
for(i=0;i <5;i++)
{
add[i].increaseNO(i);
cout < < "数据包No为: " < <add[i].getNO() < <endl;
add[i].setparket(a1);
b[10]=add[i].getparket();
cout < < "数据包中的内容为 " < <b[10] < <endl;
}
memcpy(pbuf,b,sizeof(b));
cout < < "是否继续查看内存中的数据:(Y/N) " < <endl;
cin> > YN;
memcpy(b,pbuf,sizeof(b));
if(YN== 'y ')
{
for(j=0;j <5;j++)
{ cout < < "编号为 " < <j < <endl;
for(k=0;k <10;k++)
{
cout < < "数组中的数据为: " < <b[10] < <endl;
}
}
}
}
运行后达不到我想要的效果,奇怪的地方有:
在程序中两次用到 cout < < "数组中的数据为: " < <b[10] < <endl; 但两次的结果不一样,第一次输出的全是1,第2次输出的是0~9,难道是我对内存操作时影响了其中的值???我不知道是什么地方错了,望指教下.
------解决方案--------------------
b[10]越界了。
------解决方案--------------------
自己不会调试吗...
楼上说的不错 b[10]改为b[9]看看
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
#define BYTE unsigned char
class parket
{
public:
parket();
~parket();
void increaseNO(int);
void setparket(int);
int getNO();
int getparket();
private:
int add; //和值
static int n;
int parketNo;
};
int parket::n=0;
parket::parket()
{
add=0;
parketNo=n;
}
parket::~parket(){}
void parket::increaseNO(int step) //报头的编号增加函数
{
parketNo+=step;
}
void parket::setparket(int parkdata) //设置包中的内容
{ //int i;
//for(i=0;i <192;i++)
//{
add=parkdata;
//}
}
int parket::getNO() //获取报头编号
{
return parketNo;
}
int parket::getparket() //获取处理好的包
{
return add;
}
void main()
{ char YN;
int i,j,k;
int b[10];
parket add[5];
int a1=1;
int *pbuf=new int[0x100000];
memset(pbuf,0,0x100000);//初始化buffer
for(i=0;i <5;i++)
{
add[i].increaseNO(i);
cout < < "数据包No为: " < <add[i].getNO() < <endl;
add[i].setparket(a1);
b[10]=add[i].getparket();
cout < < "数据包中的内容为 " < <b[10] < <endl;
}
memcpy(pbuf,b,sizeof(b));
cout < < "是否继续查看内存中的数据:(Y/N) " < <endl;
cin> > YN;
memcpy(b,pbuf,sizeof(b));
if(YN== 'y ')
{
for(j=0;j <5;j++)
{ cout < < "编号为 " < <j < <endl;
for(k=0;k <10;k++)
{
cout < < "数组中的数据为: " < <b[10] < <endl;
}
}
}
}
运行后达不到我想要的效果,奇怪的地方有:
在程序中两次用到 cout < < "数组中的数据为: " < <b[10] < <endl; 但两次的结果不一样,第一次输出的全是1,第2次输出的是0~9,难道是我对内存操作时影响了其中的值???我不知道是什么地方错了,望指教下.
------解决方案--------------------
b[10]越界了。
------解决方案--------------------
自己不会调试吗...
楼上说的不错 b[10]改为b[9]看看