如果知道 void* 分配大小,如何将确切的内存大小传递给 free()

Mr.*_*r.Y 1 c c++ pointers memory-management

据我所知 ; 在 c++ 和 c 中,delete运算符或free()函数可以从指针数据类型知道分配的内存大小,并delete可以自动调用析构函数。

如果分配的指针是使用一种单例静态动态数组注册的,该数组在其机制中(即malloc仅)在重载新指针中不使用 new 运算符。此数组注册void*指针并从重载中获取该指针的大小new operator

前任。

void * operator new (size_t sz) {
  void * m = malloc (sz);
  Dynamic_Array::get_instance()->add(m,sz) ; //registering  pointer
  return m ;
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是如何使用有关大小的信息来释放我忘记使用该数组的析构函数删除的确切分配的内存。

前任。

Dynamic_Array::~Dynamic_Array() {
  int index = 0;
  while(index < storage_size) //storage_size: total number of pointers in array 

 /* storage is void** array which  register 
   allocated pointers as void* and use classic memset and memcpy to enlarge*/

    {
      if (storage[index] != NULL) printf("Pointer : %d was not deleted\n", storage[index]);
//how to use delete or free here to delete void* pointer  but with known size of memory
      index ++;
      }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你。

use*_*421 5

据我所知 ; 在c++和c中delete操作符或者free()函数可以从pionter数据类型知道分配内存的大小

不可以。delete 操作符调用 free() 函数;free() 函数以某种方式从与指针关联的元数据中知道大小,例如内存前一个字中的长度字。

和 delete 可以自动调用析构函数。

是的。

我的问题是如何使用有关大小的信息来释放我忘记使用该数组的析构函数删除的确切分配内存。

你不需要知道。看上面。