我用C ++编写了一个代码,其中有一些指向对象的指针数组,这些指针作为参数提供给下面的简单代码:
void foo1(myClass **obj1)
{
//some stuff here
foo2(obj[0]);
}
void foo2(myClass *obj)
{
//some other stuff here
cout<<"I'm here"<<endl;
}
main()
{
myClass **object
object= new *myClass[n];
for(int i=0;i<n;i++)
object[i]=new myClass()
foo1(object);
cout<<"done"<<endl;
}
此代码适用于打印&#34;我在这里&#34;突然崩溃了。我认为指针数组的数组应该有问题,而且我将myclass **转换为myclass *。但我无法确切地解决问题所在。
已编辑:我在foo2和poof中标记了代码!它运作得很好。令我奇怪的是,它向我展示了执行行可以传递代码并执行某些行(例如cout&lt;&lt;&#34;我在这里&#34;)尽管已经达到了非法的内存访问错误之前。我是对的吗?
答案 0 :(得分:1)
示例代码中存在多个拼写错误和错误,导致无法编译。修复所有拼写错误产生了以下结果:
#include <iostream>
using namespace std;
class myClass {};
void foo2(myClass *obj)
{
//some other stuff here
cout<<"I'm here"<<endl;
}
void foo1(myClass **obj)
{
//some stuff here
foo2(obj[0]);
}
main()
{
myClass **object;
int n=10;
object= new myClass *[n];
for(int i=0;i<n;i++)
object[i]=new myClass();
foo1(object);
cout<<"done"<<endl;
}
这没有崩溃,并且valgrind没有显示非法内存访问或任何其他问题(没有内存泄漏)。
无论你遇到什么问题,都在其他地方。除了阻止其编译的错误之外,此代码没有任何问题。没有答案是可能的,没有看到崩溃的可编译代码,正如所宣传的那样。
答案 1 :(得分:0)
是的,关于向量的大小调整,我在使用未指定的变量空间时犯了错误。对我来说,令人惊讶的是,一个cout流可以做它的jo,同时发生了非法的内存访问。