当数据被复制到类的另一个成员时,类的成员指针会被占用

时间:2013-05-05 03:16:38

标签: c++ arrays pointers

以下是我现在遇到的问题:

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]=...),但仍面临同样的问题。

有任何帮助可以澄清或解决这个问题吗? 感谢

3 个答案:

答案 0 :(得分:2)

此问题意味着您正在写入超出其范围的buf。确保你永远不会超过第1000个索引,你会没事的。

答案 1 :(得分:2)

你可以通过交换类中header和buf的定义来找出超出数组边界的问题。将其更改为

Header* header;
char buf[1000];

并且buf进入头部的溢出不会成为问题。你仍然需要弄清缓冲区溢出的问题。

答案 2 :(得分:0)

因为您传入了Header * _header,所以您在类Packet中存储的位置的数据不是由类管理的。如果分配了这个内存的人会发生某些事情,它会反映在Packet类中对它的引用中。 初始化传递给Packet构造函数的值的代码在哪里?我想你的问题就在那里。它在堆栈上吗?你打电话给新人吗?我敢打赌它是你传递给构造函数的堆栈变量。