Memcpy

编程入门 行业动态 更新时间:2024-10-25 01:36:39
Memcpy - 为数据块分配值(Memcpy - assigning values to block of data)

我有一大块内存,我将这些内存的一些内容传递给这些函数:

void setBlockSize(char* node, int size) { printf("need size: %i\n",size); memcpy(node, (void *)&size, sizeof(size)); printf("set to: %i\n",node); } //written for 4 byte pointer, 32 bit addressing void setNextPointer(char* node, char* next){ printf("need ptr: %p\n", next); memcpy((node+4), (void*)&next, sizeof(next)); printf("next: %p, set: %p\n",next, (void*)(node+4)); }

我的输出如下:

need size: 8296 set to: 137666560 need ptr: (nil) next: (nil), set: 0x834a004 need size: 137666456 set to: 137666560 need ptr: 0xffee4874 next: 0xffee4874, set: 0x834a004 need size: 104 zsh: segmentation fault (core dumped) ./mallocTest

似乎设置了错误的值(我试图设置一个指针和一个整数。这对memcpy来说是不正确的用法?

I have a large block of memory and I am passing bits of this memory to these functions:

void setBlockSize(char* node, int size) { printf("need size: %i\n",size); memcpy(node, (void *)&size, sizeof(size)); printf("set to: %i\n",node); } //written for 4 byte pointer, 32 bit addressing void setNextPointer(char* node, char* next){ printf("need ptr: %p\n", next); memcpy((node+4), (void*)&next, sizeof(next)); printf("next: %p, set: %p\n",next, (void*)(node+4)); }

My output is as follows:

need size: 8296 set to: 137666560 need ptr: (nil) next: (nil), set: 0x834a004 need size: 137666456 set to: 137666560 need ptr: 0xffee4874 next: 0xffee4874, set: 0x834a004 need size: 104 zsh: segmentation fault (core dumped) ./mallocTest

It appears that the wrong values are being set (I am trying to set a pointer, and an integer. Is this not correct usage for memcpy?

最满意答案

在第一个函数中,当您输出刚写入的值时,不会取消引用指针。 尝试这个:

printf("set to: %i\n", *(int*)node);

第二个功能中存在同样的问题。 您想要输出存储在指针node+4内的指针值,而不是node+4本身:

printf("next: %p, set: %p\n", next, *(void*)(node+4));

关于memcpy ,使用它来编写单个值很奇怪。 你可以避免像这样的memcpy :

*(int*)node = size; *(char**)(node+4) = next;

In the first function, you are not dereferencing the pointer when you output the value you just wrote to. Try this:

printf("set to: %i\n", *(int*)node);

Same problem is present in the second function. You want to output the pointer value stored inside the pointer node+4, not node+4 itself:

printf("next: %p, set: %p\n", next, *(void*)(node+4));

Just regarding memcpy, it's strange to use it for writing a single value. You can avoid memcpy like this:

*(int*)node = size; *(char**)(node+4) = next;

更多推荐

本文发布于:2023-07-31 00:48:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1340374.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Memcpy

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!