如何获取空指针数据的副本
How to get copy of void pointer data
我尝试自己实现链表。所以当我向它添加新数据时,我使用类似 node->data = data
where data is (void*) type
的东西。所以我想通过不小心编辑添加的变量来防止数据损坏。
例如:
int data = 10;
LinkedList_add(list, (void*)&data);
...
/* It will modify value in list */
data = new value;
我该怎么做?
我试着这样复制它:
void* data_copy;
*data_copy = *_data;
但是我觉得不行,也不行。
一个简单的方法是要求调用者指定他给你的数据有多长。将 LinkedList_add
函数的签名更改为:
void LinkedList_add(List*, size_t, const void*);
然后做这样的事情,其中 size
是你从调用者那里得到的大小。
void *copy = malloc(size);
if (copy == NULL) {
/* error handling here */
}
memcpy(copy, data, size);
在现实世界中,我不会费心去做这样的事情。相反,我会要求调用者复制我放入链表中的数据。如果调用者不想自己的数据被意外覆盖,他必须自己制作一份副本。如果他希望能够覆盖数据(这是一个常见的用例)或者如果他不关心它是否被意外覆盖,他可能不想复制数据。不要试图对程序员进行指导,这在 C 中很少有回报。
我尝试自己实现链表。所以当我向它添加新数据时,我使用类似 node->data = data
where data is (void*) type
的东西。所以我想通过不小心编辑添加的变量来防止数据损坏。
例如:
int data = 10;
LinkedList_add(list, (void*)&data);
...
/* It will modify value in list */
data = new value;
我该怎么做? 我试着这样复制它:
void* data_copy;
*data_copy = *_data;
但是我觉得不行,也不行。
一个简单的方法是要求调用者指定他给你的数据有多长。将 LinkedList_add
函数的签名更改为:
void LinkedList_add(List*, size_t, const void*);
然后做这样的事情,其中 size
是你从调用者那里得到的大小。
void *copy = malloc(size);
if (copy == NULL) {
/* error handling here */
}
memcpy(copy, data, size);
在现实世界中,我不会费心去做这样的事情。相反,我会要求调用者复制我放入链表中的数据。如果调用者不想自己的数据被意外覆盖,他必须自己制作一份副本。如果他希望能够覆盖数据(这是一个常见的用例)或者如果他不关心它是否被意外覆盖,他可能不想复制数据。不要试图对程序员进行指导,这在 C 中很少有回报。