使用memcpy从缓冲区复制到结构数组时的SEGFAULT

apm*_*987 0 c arrays malloc struct memcpy

我定义了以下结构

typedef struct {
    uint16_t type;
    uint16_t name_offset;
    uint32_t data_offset;
    uint32_t size;
}node;
Run Code Online (Sandbox Code Playgroud)

sizeof(node) 按预期返回12个字节.

node *nodes = (node*)malloc(sizeof(node)*nodecount);
Run Code Online (Sandbox Code Playgroud)

在我当前的测试中,nodecount是96,并且为节点分配的内存是预期的1152.(通过_msize测试)

我想从我在偏移量为20的缓冲区memcpy进入这个新节点数组(这是我崩溃的地方).我已经确认0x20(含)-0x4A0(不包括)是这个数组的正确结构.

memcpy(nodes,buffer[0x20],sizeof(node)*nodecount)
Run Code Online (Sandbox Code Playgroud)

缓冲区看起来像这样

00000020: 01 00 00 00 00 00 00 00 00 00 00 60
...
00000490: 00 00 00 88 00 00 06 89 02 15 DE 40
Run Code Online (Sandbox Code Playgroud)

use*_*738 5

正确的使用memcpy方法是(从给出的描述)(我在偏移32处的缓冲区到这个新的节点数组)

memcpy(nodes,buffer+32,sizeof(node)*nodecount);
Run Code Online (Sandbox Code Playgroud)

要么

memcpy(nodes,&buffer[0x20],sizeof(node)*nodecount);
Run Code Online (Sandbox Code Playgroud)

之前你没有传递地址,而是传递了值本身.您试图访问一些您不应导致分段错误的内存位置.

  • :)是的,生活危险,不要把你的代码卖给任何人:) (2认同)