C ++ memcpy访问冲突大块内存

时间:2018-07-23 16:23:07

标签: c++

我是C ++领域的新手。 在行var data = { "range": ["2018-07-23T16:03:26.861Z", "2018-07-23T16:03:26.861Z"] } var result = [];// for ouput var strKey=Object.keys(data)[0];//key of main object.i.e. range var objData=data[strKey];//value of key for (let i = 0; i < objData.length; i++) { result.push(getFormattedDate(objData[i])); } var prepend=strKey+"(";//prepended var postpend=")";//postpender result =prepend+result.join(",") + postpend; console.log(result); function getFormattedDate(date) { return date.split("T")[0].replace(/-/g,''); }上引发了

  

在Memcpy.exe中的0x0FB046EE(vcruntime140d.dll)处引发了异常:   0xC0000005:访问冲突读取位置0x00544000。

为什么会这样?

memcpy(combined + 14 + 40, pThirdPart, size);

1 个答案:

答案 0 :(得分:2)

pThirdPart指向thirdPart的地址,而不是*thirdPart指向的地址。

您可能会感到困惑,因为数组的地址与指针的地址不同。当你有一个像这样的数组

char array[10];

获取该变量的地址与不使用and索引引用它相同。 array&array的值相同。

但是有了指针,情况就不同了

char *pointer;

pointer&pointer

的值不同

这只是您必须了解的C / C ++怪癖。

所以在您的程序中应该有

BYTE *pFirstPart = reinterpret_cast<BYTE*>(&firstPart);
BYTE *pSecondPart = reinterpret_cast<BYTE*>(&secondPart);
BYTE *pThirdPart = reinterpret_cast<BYTE*>(thirdPart);

甚至

BYTE *pFirstPart = reinterpret_cast<BYTE*>(firstPart);
BYTE *pSecondPart = reinterpret_cast<BYTE*>(secondPart);
BYTE *pThirdPart = reinterpret_cast<BYTE*>(thirdPart);

两种变体都可以使用。