C语言 使用memcpy()将结构体复制到另一个内存位置时遇到问题



我不知道这里发生了什么

我基本上是试图将我定义的结构变量复制到另一个内存位置我使用memcopy malloc

编译器不给出任何错误和警告

然而,当我试图访问malloc'd内存位置查看数据是否被复制时,我发现当我解引用指针时出现了一些奇怪的数字,而不是我复制的值

这是我的代码,我到底遗漏了什么,

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
typedef uint32_t u_int32_t;
typedef unsigned char byte;
typedef u_int32_t link;
typedef u_int32_t size;
typedef u_int32_t addr;
typedef struct header {
   u_int32_t unkno;  
   size sze;     
   link next;     
   link prev;     
} head;
int main(){
   head x;
   printf("%d %d %d %dn", &x, &x.unkno,sizeof(head),0x12345);
   x.unkno = 0x12345;
   x.sze = 10;
   x.next = 2;
   x.prev = 6;
   void * s = malloc(sizeof(u_int32_t)*100);
   memcpy(s, (const void *)&x, sizeof(head));
   head * k = (head *)s;
   printf("%d",*(k+1));
   return 0;
}

所以如果有人能指出我做错了什么,或者如果这是可能的?

您只将一个结构复制到您分配的400字节中,并且malloc不会以任何方式初始化内存。

malloc新分配的内存内容不确定,从未初始化的内存中读取会导致未定义行为

此外,当您执行*(k + 1)时,您将k视为数组,并访问第二个元素(*(k + 1)相当于k[1])。然后,您可以做一些更奇怪的事情,将值打印为十进制数,而实际上它并不是。

最后,当使用printf打印指针时,应该使用"%p"格式说明符。


实际上回答你的问题,那么是的,你复制的数据在那里,在分配内存的开始。不需要打印出来

我解决了这个问题

基本上是指针访问malloc内存的问题

就是这一行导致了我的问题

head * k = (head *)s;

应该是

 u_int32_t * k = (u_int32_t *)s;

相关内容

最新更新