我遇到了一个无法解决的问题。
我的问题是,如果我使用
我遇到的错误是:
我的问题是,如果我使用
malloc
来分配内存,然后使用delete
删除内存块呢?
通常的规则是:
现在,为了检查如果我们反过来做会发生什么,我写了一段小代码。如果我们使用
malloc
分配内存,则应使用free
进行删除。如果我们使用
new
分配内存,则应使用delete
进行删除。
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
class A
{
int p=10;
public:
int lol() {
return p;
}
};
int main()
{
int *a = (int *)malloc(sizeof(int)*5);
for(int i=0; i<4; i++) {
a[i] = i;
cout << a[i] << endl;
}
delete(a);
// Works fine till here..
A b;
cout << b.lol() << endl;
free(b); // Causes error.
return 0;
}
我遇到的错误是:
我无法理解为什么会出现这种情况。请解释一下。错误:不能将‘A’转换为类型为‘void*’的参数1,然后传递给‘void free(void*)’
new
来分配b
。 - Some programmer dudenew
分配的内存上调用free()
(反之亦然),将会导致未定义行为,并且任何事情都可能发生。 - Some programmer dudedelete()
/free()
需要一个指针作为参数。 - πάντα ῥεῖ