gpt4 book ai didi

c - 使用 memcpy() 将结构复制到另一个内存位置时遇到问题

转载 作者:行者123 更新时间:2023-11-30 21:02:10 25 4
gpt4 key购买 nike

好吧,基本上我不确定这里发生了什么

我基本上试图将我定义的结构变量复制到我使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com