C++ 将数据写入c+中的内存+;

C++ 将数据写入c+中的内存+;,c++,C++,我对此提出了一个问题,但我想改用memcmp()函数。 然后我读回这些值 int y; fileptr = 0; memcpy(&y, (int *)data+fileptr, sizeof(int)); cout<<y; inty; fileptr=0; memcpy(&y,(int*)数据+文件ptr,sizeof(int)); 您可以声明一个指针数据,但从不初始化它。因此,行为是未定义的。您必须将数据指向某个地方,即分配内存。请参阅。您声明了指针数据,但从未初始化它

我对此提出了一个问题,但我想改用memcmp()函数。

然后我读回这些值

int y;
fileptr = 0;
memcpy(&y, (int *)data+fileptr, sizeof(int));
cout<<y;
inty;
fileptr=0;
memcpy(&y,(int*)数据+文件ptr,sizeof(int));

您可以声明一个指针
数据
,但从不初始化它。因此,行为是未定义的。您必须将数据指向某个地方,即分配内存。请参阅。

您声明了指针
数据,但从未初始化它。因此,行为是未定义的。您必须将数据指向某个地方,即分配内存。请参阅。

除非您遗漏了某些代码,
数据从来不会初始化,因此指向某个随机位置。由于您的应用程序没有完全崩溃,您可能(有点)幸运地发现,
数据
指向堆栈上由其他代码写入的位置;因此,价值发生了变化


在写入数据之前,为数据分配一些内存,这样就不会发生。

除非您遗漏了一些代码,
数据
永远不会初始化,因此指向某个随机位置。由于您的应用程序没有完全崩溃,您可能(有点)幸运地发现,
数据
指向堆栈上由其他代码写入的位置;因此,价值发生了变化


在写入数据之前为
数据分配一些内存,这不会发生。

您没有为数据分配任何存储空间-因此,当您将int数据复制到那里时,会损坏堆栈,从而导致无休止的问题

你可能想做一些类似的事情

int x = 1;
void *data=new int();
memcpy(data, &x, sizeof(x)); // never use the type use the var - more resilient to change

您还没有为数据分配任何存储—因此,当您将int数据复制到那里时,会损坏堆栈,从而导致无休止的问题

你可能想做一些类似的事情

int x = 1;
void *data=new int();
memcpy(data, &x, sizeof(x)); // never use the type use the var - more resilient to change

这实际上调用了未定义的行为,因为您没有为
数据
分配内存。那么它应该在哪里存储
x
的位模式呢

如果您已经分配了内存(使用
malloc
),但仍然得到错误的输出,那么在这种情况下,您正在做一些非常错误的事情。再次查看您的程序,然后再次编译并运行它。因为输出只能是
1
。见此:


逐字比较您的程序和我的程序(在上面的链接中),看看您是否缺少任何东西。

实际上调用了未定义的行为,因为您没有为
数据分配内存。那么它应该在哪里存储
x
的位模式呢

如果您已经分配了内存(使用
malloc
),但仍然得到错误的输出,那么在这种情况下,您正在做一些非常错误的事情。再次查看您的程序,然后再次编译并运行它。因为输出只能是
1
。见此:



逐字比较您的程序和我的程序(在上面的链接中),看看您是否缺少任何内容。

欢迎使用stack Overflow!你的问题到底是什么?我看不出
memcmp
在这里有什么用处。如果您解释是什么问题导致您使用此解决方案,我相信人们可以帮助您找到更好的解决方案,而不涉及微观管理指针和每次都遇到未定义的行为。您没有初始化
数据。您正在写入随机内存地址。我怀疑您不了解自己在做什么,或者指针是如何工作的。欢迎使用堆栈溢出!你的问题到底是什么?我看不出
memcmp
在这里有什么用处。如果您解释是什么问题导致您使用此解决方案,我相信人们可以帮助您找到更好的解决方案,而不涉及微观管理指针和每次都遇到未定义的行为。您没有初始化
数据。您正在写入一个随机内存地址。我怀疑您不了解自己在做什么,或者指针是如何工作的。这里的问题是数据类型是空的,我必须存储int、char和real的混合。所以我不能使用data=newint();这里的问题是数据类型是空的,我必须存储int、char和real的混合。所以我不能使用data=newint()@阿克谢:那样的话,你就大错特错了。再次查看您的程序,然后再次编译并运行它!数据的类型转换有问题吗?因为字符正确显示,而不是整数。因为int是4个字节,所以我认为sumthing可能出错了,非常感谢。。。我第一次如此深入地研究指针。我只是取消了不需要的部分的注释,然后再次运行它。它运行得很好。@Akshay:那样的话,你做错了什么。再次查看您的程序,然后再次编译并运行它!数据的类型转换有问题吗?因为字符正确显示,而不是整数。因为int是4个字节,所以我认为sumthing可能出错了,非常感谢。。。我第一次如此深入地研究指针。我只是取消了不需要的部分的注释,然后再次运行它。阿凯:看,我告诉过你,你做错了什么。现在看看你在所谓的不需要的代码中做了什么,这些代码会影响输出。@Akshay:看,我告诉过你,有些地方你做错了。现在,看看您在影响输出的所谓无用代码中做了什么。