我遇到了一个奇怪的问题,对我没有任何意义。保持对象存活的问题
我有一个结构(包含字符串)上限定为API如下:
typedef struct sNCharcb
{
char * pData;
int iDataLen;
}
tsNCharcb;
我需要保存这个结构的深层副本。我已经创建了一个实用的功能,使这个结构的副本:
inline sNCharcb rapi_strcpy(const sNCharcb &rapistr)
{
sNCharcb res;
res.pData = new char[rapistr.iDataLen];
strcpy(res.pData, rapistr.pData);
res.iDataLen = rapistr.iDataLen;
return res;
}
我创建一个使用这个工具方法这些“sNCharcb”结构的副本,并将它们保存到引用父对象变量:
stored_sNCharcb = rapi_strcpy(sNCharcb_to_copy);
经过一段时间后,这些存储值被神奇地更改为包含一些随机垃圾。存储这些值的父对象始终处于作用域内,并且不会被破坏。什么可能导致这些值过早被抹去?
是否有一个理由,为什么你不'的std :: string'呢? – 2013-02-13 20:40:07
您应该为此类实现有意义的拷贝构造函数,赋值运算符和析构函数。或者将问题标记为C.或者只是使用'std :: string'数据成员而不是'char *',所有问题都会消失。 – juanchopanza 2013-02-13 20:43:26
这是我无法更改的API。无论我喜不喜欢,我都必须玩C字符串。 – 2013-02-14 05:54:54