delete释放void*
时间: 2023-09-06 14:10:22 浏览: 59
在C语言中,使用`free()`函数来释放`void*`指针所指向的内存空间。`free()`函数的原型定义在`stdlib.h`头文件中,其用法如下:
```c
void free(void* ptr);
```
其中,`ptr`是要释放的内存空间的指针。当调用`free()`函数时,它会释放`ptr`所指向的内存空间,并将该内存空间标记为可重新分配。请注意,在调用`free()`函数之后,无法再继续使用已释放的内存,否则可能会导致未定义的行为。
需要注意的是,如果传递给`free()`函数的指针不是通过调用`malloc()`、`calloc()`或`realloc()`函数动态分配的内存,或者已经被释放过,或者指向静态或自动变量的内存,则调用`free()`函数将产生未定义的行为。因此,在调用`free()`函数之前,请确保你正在释放正确的内存空间。
相关问题
iOS項目Undefined symbol: operator delete(void*)
这个错误通常是由于没有实现类的析构函数导致的。析构函数负责释放对象的资源,而 operator delete(void*) 是在释放动态分配的内存时使用的函数。如果类中动态分配了内存,但没有正确释放,将导致 operator delete(void*) 找不到相关的符号,从而导致这个错误。检查代码中是否实现了类的析构函数并正确释放了动态分配的内存就可以解决这个问题了。
一个float* 动态内存通过void*传入B函数,是否能用delete[] 释放这个void*
不可以。因为void*不是一个数据类型,不能进行delete操作。要释放这个动态内存,需要将void*转换为原始的数据类型,即float*,再使用delete[]进行释放。可以使用强制类型转换将void*转换为float*,例如:
```
void B(void* ptr) {
float* data = static_cast<float*>(ptr);
delete[] data;
}
```