标签: void-pointers

C:深度复制 - 带有空指针的结构

我有一个以下的结构

struct teststruct
{
int *a;
void *data;      
};
Run Code Online (Sandbox Code Playgroud)

是否可以对包含空指针的结构进行深层复制?我假设我不知道data指针指向多少字节?所以我不能指定malloc指定的字节数并做memcpy.我对吗?

c void-pointers memcpy data-structures

3
推荐指数
3
解决办法
5369
查看次数

C++:转换为void*并返回

*---编辑 - 现在整个过程*

当我在最后调试它时,"get"和"value"具有不同的值!可能,我转换为void*并以错误的方式返回User?

#include <db_cxx.h>
#include <stdio.h>

struct User{
User(){}
int name;
int town;
User(int a){};
inline int get_index(int a){
    return town;
} //for another stuff
};
int main(){ 
try {
DbEnv* env = new DbEnv(NULL);
env->open("./", 
    DB_CREATE | DB_INIT_MPOOL | DB_THREAD | 
DB_INIT_LOCK | DB_INIT_TXN | DB_RECOVER | DB_INIT_LOG, 0);
Db* datab = new Db(env, 0);
datab->open(NULL, "db.dbf", NULL, DB_BTREE, DB_CREATE | DB_AUTO_COMMIT, 0);

Dbt key, value, get;
char a[10] = "bbaaccd";
User u;
u.name = 1;
u.town …
Run Code Online (Sandbox Code Playgroud)

c++ berkeley-db void-pointers

3
推荐指数
1
解决办法
1068
查看次数

void*C#中的替代品

我正在创建一个调用回调函数的类,我希望它在某些情况下传递一些数据,但数据可能会有所不同.在C++中我会使用void*但在C#中它是不安全的,这意味着它可能会得到GCed.有没有办法在C#中传递未知类型的数据?

c# arguments function void-pointers

3
推荐指数
2
解决办法
1535
查看次数

增加空白时的垃圾值*

这段代码:

#include <stdio.h>
int main(void)
{
   void *ptr;
   int arr[] = {1,2,3,4,5};
   ptr = arr;
   ptr++;
   printf("%d",*(int*)ptr);
}
Run Code Online (Sandbox Code Playgroud)

打印一些垃圾值,但我期待它打印2.为什么不打印2

c pointers void-pointers

3
推荐指数
1
解决办法
164
查看次数

C编程 - 线程,什么是void(*func)(void*,unsigned long)

我正在考虑修改玩具操作系统,我只是想学习一些代码及其功能.我被赋予了一个"线程"结构,它具有"pcb"结构的成员,这是一个过程控制块,它将线程连接到我认为的底层物理硬件.

无论如何,在这个"pcb"结构中有初始化函数,它初始化新创建的线程的pcb.这是函数定义:

void md_initpcb(struct pcb *, char *stack, void *data1, unsigned long data2,
    void (*func)(void *, unsigned long));
Run Code Online (Sandbox Code Playgroud)

关于代码,最后一个参数的含义是什么?它与代码或指令有关

从概念上讲,我对这些东西如何适应大局感到困惑.据我所知,Thread是代码执行的单位; 例如,它可以与用户程序相关,因此线程之间的切换可以快速地提供并行运行进程的错觉.好吧所以这个Thread然后需要它自己的堆栈,寄存器(不明白)和一些控制(pcb).

对不起,如果这到处都是.作为参考,我正在启动OS161项目.

谢谢.

c multithreading operating-system void-pointers os161

3
推荐指数
1
解决办法
943
查看次数

`void*`到其他指针

如果我将a传递void *vptr给一个带有other_type *ptrarg 的函数,它会vptr自动转换为other_type *?这是代码,

typedef struct A {
    //...
}A;

void bar(A *a)
{
    //do something with a
}

int main()
{
    A a = {..};
    void *vp = &a;
    bar(vp);  //will vp be converted to A*?
}
Run Code Online (Sandbox Code Playgroud)

我的代码安全或正确吗?

c void-pointers

3
推荐指数
1
解决办法
224
查看次数

void指向动态分配的类的指针

我正在尝试将void*传递给函数,然后在该函数内部使指针指向动态创建的对象.这是我到目前为止,但它似乎没有工作:

主要:

int main()
{
  void* objPtr;

  setPtr(objPtr);
}
Run Code Online (Sandbox Code Playgroud)

setPtr:

void setPtr(void*& objPtr)
{
  objPtr = new Obj1; 
  (*objPtr).member1 = 10; //error: expression must have pointer-to-class type
}
Run Code Online (Sandbox Code Playgroud)

OBJ1:

struct Obj1
{
  int member1;
};
Run Code Online (Sandbox Code Playgroud)

提前致谢

c++ void-pointers

3
推荐指数
1
解决办法
5739
查看次数

可以将shared_ptr <T>向上转换为shared_ptr <void>会导致未定义的行为吗?

共享指针非常聪明.他们记住了最初构造的类型,以便正确删除它们.以此为例:

struct A { virtual void test() = 0; };
struct B : A { void test() override {} };

void someFunc() {
    std::shared_ptr<A> ptr1;

    ptr1 = std::make_shared<B>();

    // Here at the end of the scope, B is deleted correctly
}
Run Code Online (Sandbox Code Playgroud)

然而,void指针似乎存在一个问题:为了使void指针的向下转换有效,必须将它向下转换为它最初上传的类型.

例如:

void* myB = new B;

// Okay, well defined
doStuff(static_cast<B*>(myB));

// uh oh, not good!
// For the same instance of a child object, a pointer to the base and
// a pointer to the child can …
Run Code Online (Sandbox Code Playgroud)

c++ pointers void-pointers shared-ptr

3
推荐指数
1
解决办法
318
查看次数

关于解除引用'void*'指针

我无法从下面的代码行中找到如何删除上述警告.data是void指针,并且作为回调函数的一部分,将在数据指针中接收字符串.因为我有类型的void指针,但编译器仍然显示警告.

下面的线基本上有两个警告.1.取消引用'void*'指针2.获取'void类型的表达式的地址

 service_ind = atoi((const char*)&data[at_response.param[0].start_of_value_index]) ? TRUE:FALSE ;
Run Code Online (Sandbox Code Playgroud)

以下是必填信息

void * data;
AT_PARSER_RESPONSE at_response;

typedef struct
{

/*Other parameters */

AT_PARAM  param[AT_MAX_NUM_PARAM];

}AT_PARSER_RESPONSE
Run Code Online (Sandbox Code Playgroud)

c pointers void-pointers dereference

3
推荐指数
1
解决办法
625
查看次数

为什么我必须重新解释指针指针?

所以这段static_cast代码完全合法:

int n = 13;
void* pn = static_cast<void*>(&n);
void** ppn = &pn;
Run Code Online (Sandbox Code Playgroud)

然而,这必须编成一个reinterpret_cast编译:

int n = 13;
int* foo = &n;
void** bar = static_cast<void**>(&foo);
Run Code Online (Sandbox Code Playgroud)

如果我不改变它我得到错误:

错误C2440 :: static_cast无法转换int **void ** 注释:指向的类型不相关; 转换需要reinterpret_cast,C风格的演员或功能风格演员

所以我认为问题是"类型无关".然而,我还是不明白,如果它从去时是确定int*void*他们怎么能不相关的int**void**

c++ void-pointers double-pointer static-cast reinterpret-cast

3
推荐指数
1
解决办法
226
查看次数