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)
正确的使用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)
之前你没有传递地址,而是传递了值本身.您试图访问一些您不应导致分段错误的内存位置.
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |