我遇到了一个我无法解决的问题.
我的问题是,如果我malloc
以前分配内存然后内存块被删除使用delete
?一般的拇指规则是
如果我们使用malloc分配内存,则应使用free删除它.
如果我们使用new分配内存,则应使用delete删除它.
现在,为了检查如果我们反过来会发生什么,我写了一个小代码.
#include#include #include 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; }
我得到的错误是:
错误:无法将参数'1'的'A'转换为'void*'为'void free(void*)'
我无法理解为什么会这样.请解释.