VirtualAlloc开辟内存,用memcpy_s内存拷贝数据,总是LPVOID“未知大小”应用场景:
用VirtualAlloc开辟内存,用memcpy_s从另外的数据源向开辟好的内存拷贝数据,
编译时总是报错:error C2036: “LPVOID”: 未知的大小具体程序如下:
1,*.h中定义了开辟内存的句柄,以及需要开辟的内存数量:
LPVOID pY;
LARGE_INTEGER liYFileSizeDst ;   // 由于比较大,采用了“大整数”2,*.cpp中计算需要开辟的内存大小
liYFileSizeDst.QuadPart = chROUNDUP(liTemp.QuadPart, BUFFSIZE);3,*.cpp中用VirtualAlloc开辟内存。
pY = VirtualAlloc(NULL, liYFileSizeDst.QuadPart, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);4,*.cpp中用memcpy_s从另外的数据源向开辟好的内存拷贝数据。
memcpy_s(pY + pCopyStartofYPbPr , 1, pCopyStartofBMP + CPubVarFunc::m_lpImage, 1);
其中pCopyStartofYPbPr是unsigned int,是指针偏移量。CPubVarFunc::m_lpImage是数据源。
一次拷贝一个字节。编译时总是报错:error C2036: “LPVOID”: 未知的大小
可是我在VirtualAlloc开辟内存时,指定了大小liYFileSizeDst.QuadPart。急,在线等。

解决方案 »

  1.   

    memcpy_s(pY + pCopyStartofYPbPr , 1, pCopyStartofBMP + CPubVarFunc::m_lpImage, 1);这里的pY是void*指针,所以不能+操作。
    强制转换成byte*即可
      

  2.   

    > LPVOID 转换成 LPBYTE
      

  3.   

    LPVOID是一个void*类型的指针,memcpy_s函数的第一个参数确切的说不能为void*类型,虽然所以要把这个指针强制转换成一个Byte类型的指针
    byte* p = (byte*)&pY;