我试图使用Direct3D 9加载大量原语,所以我需要将大量的struct传递给虚拟缓冲区。但是,如果我使用malloc()
执行此操作,则sizeof()
函数将返回错误的值(始终为4)。如果我通常分配堆栈内存(array[number]
),堆栈可能因为元素数量而溢出。
有什么替代品吗?如何分配可以加载尽可能多的数据的堆栈内存?
P.S。我不会将它们全部绘制到屏幕上,但我仍然需要它们的顶点信息。
答案 0 :(得分:1)
当与指针一起使用时,sizeof
运算符返回指针的大小而不是它指向的大小。
当您动态分配内存时(在C ++中使用new
而不是malloc
),您需要自己跟踪条目数量。或者更好的是,使用例如std::vector
答案 1 :(得分:0)
是malloc()
,然后使用sizeof()
会给你4.这是指针大小。
如果您只是想知道如何填写ptr中的值,请参考下面的代码:
int numOfItems = 10; int* pArr = (malloc(sizeof(int)*numOfItems); for (int i=0;i<numOfItems;i++) pArr[i] = i+1;
答案 2 :(得分:0)
如果您调用了malloc,则使用所需空间大小调用它。如果您想稍后知道分配的大小,您需要自己保留这些信息。
由于你使用C ++,你可以使用如果你调用了malloc,你可以用你想要的空间大小来调用它。如果您想稍后知道分配的大小,您需要自己保留这些信息。
如果这太麻烦了,因为你使用C ++,你可以使用<vector>
或类似的,它将跟踪自己的大小。矢量或类似物,它将追踪自己的大小。
答案 3 :(得分:0)
您最好的选择可能是动态分配std :: vector并使用智能指针。
std::shared_ptr< std::vector< your data type> > vertices( new std::vector( number );
现在你不会溢出堆栈,所有相关的内务处理都是由std :: vector和std :: shared_ptr完成的,最重要的是内存将被删除。