好吧,基本上我不确定这里发生了什么
我基本上试图将我定义的结构变量复制到我使用 memcopy 进行 malloc 的另一个内存位置
编译器没有给出任何错误和警告
但是,当我尝试访问 malloc 的内存位置以查看数据是否已复制时,当我取消引用指针而不是复制的值时,我发现出现了一些奇怪的数字
这是我的代码,我在这里到底缺少什么,
#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 %d\n", &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"
格式说明符。
要真正回答您的问题,那么您复制的数据就在那里,位于分配的内存的开头。您只是不打印任何内容。
关于c - 使用 memcpy() 将结构复制到另一个内存位置时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32218236/