【发布时间】:2016-01-21 20:07:26
【问题描述】:
为什么会这样?
u_char macDst[6], macSrc[6], ipType[2]={0x88, 0x92};
u_char header[] = {0x04,0x00,0x20,0x00,...,};
const int len = sizeof(macDst) + sizeof(macSrc) + sizeof(header) + 2;
u_char* pck[len];
int j = 0, length = sizeof(macDst);
for (j; j < length; j++)
{
pck[j] = &macDst[j];
}
length += sizeof(macSrc);
for (j; j < length; j++)
{
pck[j] = &macSrc[j - sizeof(macDst)];
}
pck[j++] = &ipType[0];
pck[j++] = &ipType[1];
length += sizeof(header) + 2;
for (j; j < len; j++)
{
pck[j] = &header[j - sizeof(macDst) - sizeof(macSrc)];
}
u_char testSend[170];
memcpy(testSend, *pck, sizeof(pck));
var testSend 只有 macDst 值(在初始化之前),而在指针中我拥有所有这些值。如果我一个一个地复制它们,我会得到一个很好的结果:
for (int k = 0; k < 170; k++)
{
testSend[k] = *pck[k];
}
有什么想法吗??
谢谢!!
编辑:
这是一个物理问题:
-----ooooooooo------------aaaa----bbbb----
- Null Data
当我创建指针数组时,我正在这样做:
oooooooooaaaabbbb
但是当我发送数据包并执行 memcpy(或 memmove)时,我是这样说的:获取这个指针和这个内存量并复制它们:
----|oooooooooo----------|----aaaaa----bbbb----
是三个内存位置的总和。
【问题讨论】:
-
pck是指向u_char的指针 数组,这对我来说似乎是错误的。如果它是u_char的数组并且您将所有单个字节而不是指针复制到它会更有意义,因为将一系列进程私有指针发送到其他地方(尤其是通过我猜你的网络)做)只是没有意义。 -
您对
memcpy的调用是错误的,您将指针数组的一部分复制到testSend,而不是指针指向的内容。 -
是的,这是针对网络的,但是:是的,这没有任何意义,因为我的想法是独立创建标头数组,然后将它们的指针加入指针数组中。我明白了,因为当我翻过它时,我看到了所有这些。问题可能是这样的: -----ooooooo----------------------------oooooooo--------ooooooooo (- null) (o data) 当我将它们加入数组时,我可以访问所有排序的,但是,当我这样做时(memcpy),我是说,获取这个指针并复制这个内存量:170:- |ooooooooo------------|------oooooo-------oooooooo 我正在接受|这些价值观|
-
“数组中的内存混乱” - 不幸的是,这很常见。请改用
std::string和std::vector,甚至使用std::array。