void-pointers相关内容
所以我在我的C ++应用程序中使用这个C库,其中一个函数返回一个void *。现在我不是纯C的最尖锐的,但听说一个void *可以投射到几乎任何其他*类型。我也知道,我期望在这个函数的某个地方有一个浮点。 所以我将void *转换为float *,并解除引用float *,crash。 darn! 我调试代码,在gdb让它评估(float)voidPtr 和低,看看这个值是我期望和需要!
..
受到有关动态投射到 void * 的此回答的启发, : ... bool eqdc(B * b1,B * b2) { return dynamic_cast(b1)== dynamic_cast(b2); } ... int main(){ DD * dd = new DD(); D1 * d1 = dynamic_cast
..
我有一个指向 Fred 的指针的const指针,我不明白为什么 static_cast isn足够。 typedef struct { int n; } Fred; Fred * pFred; Fred ** const ppFred =& pFred; void ** const ppVoid = static_cast(ppFred)
..
受到有关动态投射到 void * 的此回答的启发, : ... bool eqdc(B * b1,B * b2) { return dynamic_cast(b1)== dynamic_cast(b2); } ... int main(){ DD * dd = new DD(); D1 * d1 = dynamic_cast
..
错误1错误C2036:'const void *':未知大小file.cpp 111 我不跟着。 GCC从不抱怨void *指针运算,即使在 -ansi -pedantic -Wall 。有什么问题? 以下是代码 - struct MyStruct { const void * buf; //指向缓冲区的指针 const void * bufpo
..
在浏览网页和搞乱自己后,我似乎无法将void *的目标(这是一个字符串)转换为std :: string。我尝试使用 sprintf(buffer,”%p“,*((int *)point)); .daniweb.com / forums / thread221261.html“>此页面获取C字符串,但无效。很遗憾,是的,我必须使用void *,因为这是SDL在USEREVENT结构中使用的。
..
如何释放void指针。 struct vStruct { void * vPtr; struct vStruct * next; }; struct vStruct sObj; struct vStruct * sObjNew = sObj; delete sObjNew-> vPtr; ----------->这是正确的方法删除void指针 delete s
..
我已经看到和使用了很多次是C ++,特别是在各种线程实现。我不知道是否有任何陷阱/问题这样做?有没有办法,我们可以运行到一个错误或未定义的条件,当我们转换为void *,然后再回来?如果有任何问题,我们应该如何解决这些问题? 谢谢。 解决方案 $ b $ b 在将 void * 转换回特定类型时,您需要绝对确定,如果不这样,则最终得到未定义行为和潜在灾难。一旦您使用 void
..
我有一个C ++程序: 结构参数 { int a,b,c ; arguments():a(3),b(6),c(9){} }; class test_class { public: void * member_func(void * args){ arguments vars =(arguments *)(* args); //错误:void不是 //指针到对象类
..
我有一个小问题:我怎么知道什么类型的C ++指针是? 我经常在我的控制台程序中使用一个小函数来收集输入,它看起来像这样: void query(string what-to-ask,[insert datatype here] * input) 我想使用void指针创建一个通用形式, ,所以我怎么知道它的类型,所以我可以施展它? 解决方案 以C ++编码,但.
..
我正在编写代码,直到现在我正在使用这样的结构: struct s { enum类型{zero = 0,one,two}; unsigned int type; void * data; } 我需要一些通用结构来存储不同类的数据,我想使用它在std :: vector,所以这就是为什么我不能使用模板的原因。更好的选择:联合或void指针? Void指针只
..
我的程序需要使用void *为了在动态调用情况下传输数据或对象,以便它可以引用任意类型的数据,甚至是原始类型。但是,我最近发现,在具有多个基类的类中,下载这些void *的过程失败了,甚至在调用这些向下转换的指针上的方法之后,甚至崩溃了我的程序,即使内存地址看起来是正确的。 所以我创建了一个小测试用例,环境是Mac OS X上的gcc 4.2: class Shape { publ
..
我在C ++中有一个数组: Player ** playerArray; 这是在它的类的构造函数中初始化的。 在析构函数中,我有: delete playerArray;除了通过Valgrind测试程序时,它表示有一些调用要删除一个void指针: 操作员delete(void *) 我想在调用delete之前测试p
..
我想知道这是什么意思,我在看的代码 在.h typedef void(* MCB)(); static MCB m_process; in .C MCB Modes :: m_process = NULL; 有时候我会做 m_process(); 我得到分段错误,这可能是因为内存已释放, ?
..
这是 pthread_create()中的参数。我认为每个部分意味着: void * :返回值是一个void指针。 (*):这是一个指向函数的指针。 > 是否正确? 解决方案 Yes ,它是一个接受和返回 void * 的无名函数指针的签名。 如果它有一个名称(如在变量中),它将是: void *(* myFuncName)(void *)
..
可能重复: 我经常看到类似下面的代码: void * foo int bar); 这是什么意思?这是否意味着它可以返回任何 ?这类似于C#中的动态或对象吗? 解决方案 A void * 并不意味着什么。它是一个指针,但它指向的类型是未知的。 这不是它可以返回“任何东西”。返回 void * 的函数通常执行以下操作之一: 它正在处理未格式化的内存。这是 oper
..
根据 this , void * 没有RTTI信息,因此从 void * 投射是不合法的,是有意义的。 $ b b 如果我没记错, void * 正在使用gcc。 dynamic_cast 您可以澄清问题。 解决方案 dynamic_cast 只适用于多态类型,即包含虚函数的类。 在gcc中,您可以 dynamic_cast 到: void * 但不是来自: str
..
我在读一本书,发现 reinterpret_cast 不应该直接使用,而是转换为void *与 static_cast : T1 * p1 = ... void * pv = p1; T2 * p2 = static_cast(pv); 而不是: T1 * p1 = ... T2 * p2 = reinterpret_cast
..
我有一个原型 void * myFcn(void * arg)的函数,它用作pthread的起始点。我需要将参数转换为一个int供以后使用: int x =(int)arg; 编译器(GCC版本4.2.4)返回错误: file.cpp:233:error:从'void *'转换为'int'失去精度 解决方案 可以将其转换为 intptr_t 类型
..
假设我有以下代码: void * my_alloc(size_t size) { return new char [size]; } void my_free(void * ptr) { delete [] ptr; } 这样安全吗?或者必须在删除之前将 ptr 转换为 char * ? 解决方案 这取决于“安全”。它通常工作,因为信息与分配本
..