如何将动态分配的指针数组(转换为对象)转换为指向对象的单个指针?

时间:2014-09-04 21:58:38

标签: c++ arrays pointers

我用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;)尽管已经达到了非法的内存访问错误之前。我是对的吗?

2 个答案:

答案 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,同时发生了非法的内存访问。