读书人

std:vector的有关问题

发布时间: 2012-03-07 09:13:51 作者: rapoo

std::vector的问题
先看看偶的代码:
NXOpen::Features::FeatureCollection* f_collection = thePart-> Features();
for (NXOpen::Features::FeatureCollection::iterator it=f_collection-> begin();it != f_collection-> end();it++)
{
NXOpen::Features::Feature* f11= (NXOpen::Features::Feature* ) *it;
std::vector <NXOpen::Features::Feature*> f_v;
f_v=f11-> GetChildren();
if (f_v.size() > 0)
{
for (std::vector <NXOpen::Features::Feature*> ::iterator it_sub=f_v.begin();
it_sub!=f_v.end();it_sub++)
{
NXOpen::Features::Feature* f22= (NXOpen::Features::Feature* ) *it;
}

}
}

上面的代码编译和连接没有问题,但是执行到 f_v=f11-> GetChildren();这一句时,就报错说是内存冲突。

我的目的是想把getChildren()函数所返回的一个vector取出来,存在另一个声明的名为f_v的vector中。第一个for循环执行的没有大问题,为什么在赋值时以及使用vector的size等函数时就出错?提示说是Access Violation?
其中,getChildren的函数说明如下:
std::vector <NXOpen::Features::Feature *> NXOpen::Features::Feature::GetChildren ( )
Returns the immediate child features.

因为是做二次开发,所以getChildren这个函数的源代码看不到。是我的vector用法有问题吗?
这个问题搞了快半个月了还没搞定,救命啊!

[解决办法]
f_v=f11-> GetChildren();改成就只有f11-> GetChildren();看是不是仍内存冲突。
f11恐怕是空指针吧。
[解决办法]
std::vector <NXOpen::Features::Feature*> * f_v;
f_v=&f11-> GetChildren();
换指针试试
[解决办法]
有条件的话,建立一个单独的工程,单独测试那个函数。看看是不是有问题?

[解决办法]
我在做一个项目时也遇到过几个内存冲突问题,但在我那个项目里100%的是指针问题,建议最好多多测试指针,因为他不是每次测试都出错,随机性很大的.
另加一句,再看一下是不是权限问题.

读书人网 >C++

热点推荐