0

我想实现一个从对象数组中选择一个随机对象并将其返回给我的函数。它应该类似于(在 C++ 中而不是伪代码中):

getRandomObject(objectList) {
    return objectList[int(random(length of objectList))];
}

我当前的代码看起来像这样,但似乎不起作用:

//definition of random selector
object getRandomObject(Object* objectList) {
    return objectList[int(ofRandom(0, sizeof(objectList)))];
};

//create a pointer for the listOfObjects
object* listOfObjects;

//create an empty object to put the randomly selected object in
object randomObject;

//later in the code, populate the array:
object* listOfObjects[] = {
    new Object(),
    new Object(),
    new Object()
};

//select random object
randomObject = getRandomObject(listOfObjects);

但这似乎返回了分段错误。我注意到的几个问题:

sizeof() 返回 getRandomObject 中指针的大小,而不是数组的大小。有没有获得数组大小的好方法?它可能涉及不为数组使用 float* 指针。这是向量的一个很好的用例吗?

我认为大部分问题在于我如何创建我的数组,而不是我如何从中选择随机对象。我对 C++ 比较陌生(来自 Java 背景),所以很多指针/引用/内存管理对我来说都是新的。

谢谢!

4

4 回答 4

3

我看到一个明确的问题和一个可能的问题。明确的问题是sizeof(objectList)返回objectList指针的大小,在大多数平台上将是 4 或 8。它不返回数组中的元素数,objectList. 要么传入数组的长度,要么使用std::vectoror std::array

第二个可能的问题与ofRandom. 确保ofRandom(a,b)返回数字 >= a,但严格 < b。如果它返回值 <= b,那么你需要我们ofRandom(0, objectVector.size() - 1)。通常,像这样的函数被编写为严格返回值 < b,但您应该检查一下。

于 2013-06-30T01:15:14.537 回答
0

C++ 有一个您可能要考虑使用的数组模板类。在此处查看文档: http ://www.cplusplus.com/reference/array/array/

这种类型有一个方法,size(),它将返回数组的长度。

于 2013-06-30T01:07:11.387 回答
0

Fooz 先生注意到导致段错误的问题。

其他编译问题是:

listOfObjects用 2 种不同的类型声明: object*并且object*[3]whilegetRandomObject需要一个 type Object*

listOfObjects[]包含 type 的元素object*whilegetRandomObject读取 type 的元素Object并返回object.

于 2013-06-30T01:36:00.930 回答
0

当 sizeof 运算符应用于数组时,它会产生该数组中的总字节数,而不是数组标识符表示的指针的大小。 引用

因此,您将为整个数组分配的空间除以一个元素所需的内存:sizeof(objectList) / sizeof(*objectList).

于 2013-06-30T01:18:45.730 回答