【发布时间】:2013-08-04 20:28:00
【问题描述】:
我想将指向向量数组中某些元素的指针设置为 NULL(基于标准),然后检查元素指针是否为 NULL。如果指向该元素的指针为 NULL,则从向量数组中删除该元素。
我的编译器给我一个错误,说地址表达式必须是左值或函数指示符,我不明白为什么(代码中注释的行位置)。由于我使用& 获取值的地址,所以我没有看到指向该元素的指针是否为NULL?
我包含了前面的代码,因为错误可能在那里,
相关代码:
vector<particle> pl = c.particlelist;
vector<particle> noncollision = c.particlelist;
vector<vector<particle>> collisionlist = new vector<vector<particle>>();
for (int i = 0; i < c.numparticles-1; i++){
particle first = pl[i];
for (int j = i+1; j < c.numparticles; j++)
{
particle second = pl[j];
double d = distance(first, second);
if (d==0)
{
vector<particle> temp = {pl[i], pl[j]};
collisionlist.push_back(temp);
noncollision[i].setxposint(NULL);
noncollision[j].setxposint(NULL);
}
else
{
}
}
}
int j = 0;
for (int i = 0; i < noncollision.size(); i++)
{
if (&(noncollision[i].getxpos()) == NULL) ////// ERROR HERE
{
noncollision.erase(noncollision.begin()+i);
}
else
{
j++;
}
}
我是 C++ 新手,如果您能提出更优雅的方法或修复方法,将不胜感激。我还假设我将指针设置为元素的方法noncollision[i].setxposint(NULL); 是正确的?我可以使用函数返回一个整数并获取地址吗?
getxpos 和 setxposint 的函数:
int particle::getxpos(){
return xpos;
}
void particle::setxposint(int b){
xpos = b;
}
【问题讨论】:
-
vector<vector<particle>> collisionlist = *new vector<vector<particle>>();- WTF -
你似乎把你的指针和值弄混了......
-
@H2CO3 是 内存泄漏运算符 (
new*),它是一个非标准扩展 :) -
您可能是 C++ 新手,但您似乎熟悉另一种语言,每个变量都需要
new。 C++ 不是这样工作的,局部变量可以被声明并自动分配。你为使它编译而生成的构造对于任何精通 C++ 的人来说都是非常令人惊讶的。正如@sehe 指出的那样,它会导致内存泄漏。 -
你可能会从stackoverflow.com/questions/2639255/…得到一些帮助