以下是我现在遇到的问题:
class Header{
//something here
};
class Packet{
public:
Packet(Header* _header){
header = _header;
};
char buf[1000];
Header* header;
}
所以看起来很简单。当我创建一个Header(_header),然后用它作为参数创建一个Packet时,调试器中的一切看起来都很好:数据包的指针头确实指向前面创建的_header。
现在,我开始向buf加载1000个字符。对于前几百个字符,事情看起来仍然很好。但是当复制到buf的字符数量变得更大(大约800)时,数据包的指针头突然变得无用了。不知道为什么。后来,当我尝试访问创建的数据包的标题时,它是一个带有地址的程序,程序崩溃了。
我尝试了2种加载buf的方法(按strcpy
并逐个复制,如buf[i]=...
),但仍面临同样的问题。
有任何帮助可以澄清或解决这个问题吗? 感谢
答案 0 :(得分:2)
此问题意味着您正在写入超出其范围的buf
。确保你永远不会超过第1000个索引,你会没事的。
答案 1 :(得分:2)
你可以通过交换类中header和buf的定义来找出超出数组边界的问题。将其更改为
Header* header;
char buf[1000];
并且buf进入头部的溢出不会成为问题。你仍然需要弄清缓冲区溢出的问题。
答案 2 :(得分:0)
因为您传入了Header * _header,所以您在类Packet中存储的位置的数据不是由类管理的。如果分配了这个内存的人会发生某些事情,它会反映在Packet类中对它的引用中。 初始化传递给Packet构造函数的值的代码在哪里?我想你的问题就在那里。它在堆栈上吗?你打电话给新人吗?我敢打赌它是你传递给构造函数的堆栈变量。