相关疑难解决方法(0)

删除void指针是否安全?

假设我有以下代码:

void* my_alloc (size_t size)
{
   return new char [size];
}

void my_free (void* ptr)
{
   delete [] ptr;
}
Run Code Online (Sandbox Code Playgroud)

这样安全吗?或者必须在删除前ptr进行投射char*

c++ memory-management casting void-pointers

88
推荐指数
9
解决办法
5万
查看次数

如何正确删除作为void指针的对象?

我正在尝试将C++类(例如class foo)与C 接口.到目前为止,我所做的是定义一个C结构,它包含一个不透明的指针成员变量(即void*),指向相关的C++ foo对象.

struct C_foo {
  void *foo_obj;
};
Run Code Online (Sandbox Code Playgroud)

我定义了一个alloc()C接口函数来分配类型的对象C_foo:

struct C_foo* alloc(/* input */) {
  struct C_foo *out = new struct C_foo;
  out->foo_obj      = new foo(/* input */);

  return out;
};
Run Code Online (Sandbox Code Playgroud)

我现在要做的是创建一个dealloc()C接口函数,该函数将正确释放C_foo先前分配的类型的对象,如上alloc()所示:

void dealloc(struct C_foo *obj) {
  /* ??? */
}
Run Code Online (Sandbox Code Playgroud)

我知道显式删除void*指针(即delete obj->foo_obj;)会导致未定义的行为(§5.3.5/ 1 [expr.delete]):

delete-expression的结果的类型为void[81].

[81]这意味着无法使用类型指针删除对象, 因为它不是对象类型.void* void

题: …

c c++ pointers void-pointers

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

释放一个无效指针

如何释放void指针.

struct vStruct {
    void *vPtr;
    struct vStruct *next;
};

struct vStruct sObj;
struct vStruct *sObjNew = sObj;

delete sObjNew->vPtr; -----------> Is this correct way to delete void pointer
delete sObjNew;
Run Code Online (Sandbox Code Playgroud)

显示错误运算符'delete',应用于具有未定义行为的void*参数,并且很可能不会调用对象的析构函数.

c++ pointers void-pointers

0
推荐指数
1
解决办法
1762
查看次数

标签 统计

c++ ×3

void-pointers ×3

pointers ×2

c ×1

casting ×1

memory-management ×1