C ++将指针数组传递给函数

吠叫77

我在传递指向函数的指针数组时遇到问题。

类CTree01是CDecorationObj的子级。当我使用for循环时,它工作正常。

这是我的代码:

CTree01 *trees01;
int numTree01 = ...;

trees01 = new CTree01[numTree01];

//main loop
for(int i=0;i<numTree01;i++)
    {
        {
            //Everything is working okay here, renders all trees
            glPushMatrix();
            trees01[i].DrawOnTerrain(camera);
            glPopMatrix();
        }
    }

但是由于我用一个函数代替了它,所以它不再起作用了:

void DrawDecorationType(CDecorationObj* objs, int number, CCamera *camera)
{
    int x,z;
    for(int i=0;i<number;i++)
    {
        {
            glPushMatrix();
            objs[i].DrawOnTerrain(camera);
            glPopMatrix();
        }
    }
}

//main loop
DrawDecoration(trees01, numTree01, camera);

当我执行该功能时:

objs[0].DrawOnTerrain(camera);

它有效,并且仅当我渲染索引> 0的对象时才会崩溃,因此我认为传递给函数的参数一定有问题。

萨胡

让我看看是否可以使用几个简单的类来解释问题。

假设您有:

struct Foo
{
   char a;
};

struct Bar : Foo
{
   char b;
};

sizeof(Foo)1并且sizeof(Bar)2

然后Bar使用以下方法创建对象数组

Bar* barPtr = new Bar[2];

barPtr指向的内存布局如下所示:

Bar(0)  Bar(1)
|       |
v       v
+---+---+---+---+
| a | b | a | b |
+---+---+---+---+

如果将该指针传递给函数a Foo*,则该函数会将内存解释为(因为sizeof(Foo) == 1):

Foo(0)  
|   Foo(1)
|   |
v   v
+---+---+
| a | a |
+---+---+

如您所见,Foo(1)它并不是真正的Foo对象。确实是的Bar子对象Bar(0)这很容易导致不确定的行为。根据基类和派生类所具有的数据类型,它很容易使程序崩溃。

关键点是,指向派生类对象数组的指针不能被视为指向基类对象数组的指针。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将数组传递给函数-指针与引用(C ++与C)

来自分类Dev

将字符指针数组传递给C函数

来自分类Dev

将数组的指针传递给C中的函数

来自分类Dev

C指针,了解如何将数组传递给函数

来自分类Dev

C将void指针数组传递给函数

来自分类Dev

将结构数组传递给函数作为指针(C)

来自分类Dev

将指针传递给char数组作为函数的参数-C

来自分类Dev

将指针传递给C ++中的函数

来自分类Dev

将结构指针传递给函数c ++

来自分类Dev

C ++:将指针向量传递给函数

来自分类Dev

将char指针传递给C函数

来自分类Dev

C - 将指针传递给函数

来自分类Dev

将指针(数组名称)传递给C / C ++中的函数

来自分类Dev

通过将指针传递给C中的函数来创建2D数组

来自分类Dev

C-将二维数组上的指针传递给函数

来自分类Dev

C ++ / Arduino将存储在PROGMEM中的2D数组的指针传递给函数

来自分类Dev

如何将500个指针的一维数组传递给C中的函数

来自分类Dev

C-无法将数组引用传递给函数中的指针参数

来自分类Dev

C-将二维数组上的指针传递给函数

来自分类Dev

将数组的指针传递给要在 C 中的 printf` 中使用的函数

来自分类Dev

C ++直接将数组传递给函数

来自分类Dev

将数组传递给C中的函数

来自分类Dev

将C数组传递给Rust函数

来自分类Dev

将char数组传递给函数C ++

来自分类Dev

将数组传递给类函数C ++

来自分类Dev

指向结构中数组的C指针传递给函数

来自分类Dev

将实例方法传递给需要C函数指针的API

来自分类Dev

C ++将指针传递给非静态成员函数

来自分类Dev

使用cgo将函数指针传递给C代码