我有一个简单的课程aClass
:
class aClass
{
public:
aClass(int size)
{
condition = new bool[size];
}
~aClass()
{
delete condition;
}
bool getCondition(int i) const
{
return condition[i];
}
void setCondition(bool* condition, int i)
{
*(this->condition + i) = *condition;
}
private:
bool* condition;
};
实际上我定义了一个bool指针并使用构造函数来分配内存。
#include <iostream>
#include "aClass.h"
using namespace std;
int main()
{
aClass tempVar(10);
bool *pC;
for (int i = 0; i < 10; i++)
{
*pC = 0;
tempVar.setCondition(pC, i);
}
for (int i = 0; i < 10; i++)
{
cout << tempVar.getCondition(i);
}
return 0;
}
我不知道此代码中的问题是什么。
我使用gcc 4.6.3版来编译代码。
答案 0 :(得分:4)
尽管您从未初始化指针,但您尝试取消引用pC
。可能pC
应该有bool
类型,而不是bool*
,同时*pC = 0
应该pC = 0
,而setCondition
可能会bool
bool*
1}}不是delete
。
您delete[]
虽然它应该是aClass
,但请参阅此处原因:delete vs delete[]
如果在某处复制std::vector
的实例,您的代码将尝试删除已分配的内存两次。请参阅Rule of three。
您应该使用{{1}}而不是手动分配的数组。
答案 1 :(得分:2)
这里有两个相互排斥的问题:
您尚未初始化pC。这样做:
int main() {
⋮
bool * pC = new bool;
⋮
delete pC;
}
实际上,原始指针不是一个好主意,所以这更好:
std::unique_ptr<bool> pC(new bool);
// No delete required.
setCondition()
根本不需要指针参数:
class aClass {
⋮
void setCondition(bool cond, int i) {
condition[i] = cond;
}
⋮
};
int main() {
⋮
for (int i = 0; i < 10; ++i) {
tempVar.setCondition(false, i);
}
⋮
}