首先,这不是duplicate。我的问题是如何用动态内存来做到这一点。这是不同的原因是因为我的delete[]
挂。如何将非空字符串复制到动态内存
所以,这里是我有:
class PacketStrRet {
public:
PacketStrRet(char p_data[], int p_len) : len(p_len) {
data = new char[p_len];
memcpy(data, p_data, p_len * sizeof(char));
}
~PacketStrRet() {
delete[] data;
data = nullptr;
}
char* data;
int len;
};
是的,我知道,我的代码是不是使用的最佳实践。我会在稍后清理它。
我遇到的问题是在DTOR中。该删除是永久悬挂的。传递给CTOR的数据是而不是动态内存,所以我需要使其动态变化,所以事情不会超出范围。 p_len
拥有正确的数据量,所以这里没有问题。
从我读过的,memcpy
似乎是这里最有可能的罪魁祸首。那么,我该如何复制一个不以空字符结尾的字符串到动态内存中,然后还能够将其删除呢?
谢谢。
这也看起来像三违反规则。 –
@KerrekSB,你可以把它放入答案吗? – David
看起来没问题。只要你没有奇怪的平台,或者将它添加到'new'调用中,你就可以删除memcpy中的* sizeof(char),但这应该没有什么区别。我猜这个错误是在其他地方。 – Matthias247