用c ++将数据写入内存

时间:2011-10-18 02:40:13

标签: c++

我发布了一个问题,但我想改用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的不同输出(一些长整数值)。请立即帮助。

4 个答案:

答案 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以外的任何其他内容。见:

将您的程序与我的程序(在上面的链接中)逐字比较,看看是否有任何遗漏。