我正尝试存储一个char*
,该位置会定期更新。
我需要将其指向的数据存储在c ++中的容器中
我尝试使用char*
vector ,但是所有元素都指向最后更新的char*
。
这是我的代码:
std::vector<const char*>Packets;
char* Packet;
void __declspec (naked) RecvCaller()
{
__asm mov ecx, [ebp + 0x08]
__asm mov Packet, ecx
Packets.push_back(Packet);
__asm jmp dwJmpBack
}
我怎么能做到这一点?
答案 0 :(得分:2)
我不认为您要存储指向Packet的指针,而是要存储Packet本身。
因此,您需要构造一个数据包向量,创建一个新的向量元素并将指向的数据复制到该向量元素中。
因此,假设您有一个cPacket类,该类具有一个带char指针的构造函数,那么您可以编写
class cPacket {
public:
cPacket( char* p )
{
// code to copy the data into attributes
...
}
};
std:vector< cPacket > vPacket;
...
vPacket.push_back( cPacket( Packet ) );
或者,如果您的其余代码期望指针向量
std::vector< cPacket* > vpPacket;
...
vpPacket.push_back( new cPacket( Packet ) );
答案 1 :(得分:1)
您可以将char *放入向量中。也许您正在其他代码中更改Packet的值?这是一个简单的例子。
#include <iostream>
#include <vector>
int main(int argc, char* argv[])
{
char * ptr;
char a[] = "first";
char b[] = "second";
char c[] = "third";
std::vector<char const *> v;
ptr = a;
v.push_back(ptr);
ptr = b;
v.push_back(ptr);
ptr = c;
v.push_back(ptr);
for(auto const & element:v)
{
std::cout << element << std::endl;
}
}
如果后续代码更改了a,b或c,则存储的char *当然会反映出更改。
正如@ravenspoint指出的那样,也许您想制作Packet的完整副本并将其存储在向量中而不是指针中。