我发布了一个问题,但我想改用memcmp()函数。 Writing data to memory in C++
int x = 1;
int fileptr = 0;
void *data = malloc(4096);
memcpy((int *)data+fileptr, &x, sizeof(int));
然后我读回了值
int y;
fileptr = 0;
memcpy(&y, (int *)data+fileptr, sizeof(int));
cout<<y;
这样,我得到变量y的不同输出(一些长整数值)。请立即帮助。
答案 0 :(得分:4)
您声明指针data
但从不初始化它。所以行为是不确定的。你必须在某处指向data
,即分配内存。请参阅here。
答案 1 :(得分:0)
除非你遗漏了一些代码,否则data
永远不会被初始化,因此指向一些随机位置。由于你的应用程序没有完全崩溃,你可能会(有点)幸运,并最终以data
指向堆栈中由其他代码写入的位置;因此价值的变化。
在写入之前为data
分配一些内存,但这不会发生。
答案 2 :(得分:0)
您还没有为数据分配任何存储空间 - 因此当您复制int数据时,通过破坏堆栈会导致问题无法结束。
您可能想要执行类似
的操作int x = 1;
void *data=new int();
memcpy(data, &x, sizeof(x)); // never use the type use the var - more resilient to change
答案 3 :(得分:0)
这实际上调用了未定义的行为,因为您没有为data
分配内存。它应该在哪里存储x
的位模式呢?
如果你已经分配了内存(使用malloc
),但输出仍然错误,那么在这种情况下,你正在做一些非常错误的事情。再次查看您的程序,然后再次编译并运行它。因为输出不能是1
以外的任何其他内容。见:
将您的程序与我的程序(在上面的链接中)逐字比较,看看是否有任何遗漏。