我不知道这里发生了什么
我基本上是试图将我定义的结构变量复制到另一个内存位置我使用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;