【发布时间】:2013-04-11 23:42:04
【问题描述】:
我对使用 malloc 和 realloc 非常陌生,我有几个问题。
问题 1。
我正在制作的游戏允许您创建自己的空间芯片,知道这一点我想知道重新分配两倍于标准的当前内存量是否更好。或者按照为所需顶点重新分配 100 个额外空间的方式做一些事情? 我自己认为第二种选择会更好,但也许有一些我不知道的东西。
问题 2
如果我有一个 malloced 的 squares[20] [4] 数组,我如何将它重新分配到 squares[100][4] 的大小?我是否将第一个数组重新分配到 100,然后将 20-99 重新分配到 4 个新点?
问题 3
现在,当我重新分配数据时,会发生一些奇怪的事情。如果我设置了一个断点,一切都会很好,但如果我让代码同时工作,它就会崩溃。所以我猜有内存泄漏。现在这是我的 realloc 代码。
unsigned char *temp =( unsigned char* ) realloc(realSpaceship, gridSize*sizeof( unsigned char ));
if(temp != NULL)
{
realSpaceship = temp;
//free(temp); Line is now deleted at the advice of the helpfull people here.
}
else
{
//error
printf("realloc error\n");
free(realSpaceship);
}
我认为释放 temp 是个好主意,但它只会使代码在不同的位置崩溃。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!
我刚刚意识到问题不在于 realloc,而在于其他地方。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!
一点额外的信息。 我正在使用 C++ 而且我也在用glm
【问题讨论】:
-
您是用 C 还是 C++ 编程?在 C++ 中,
malloc通常是人们在学习后必须un-learn的东西。 -
new、new[]、std::vector是一个选项吗? -
@DrewDormann 我正在使用 c++,但是为什么我需要忘记 malloc?
-
释放 temp 时,就是在释放 temp 指向的内存。由于您将 realSpaceship 设置为 temp,因此您还释放了 realSpaceship 指向的内存。如果 realloc 成功,您将需要在将 realSpaceship 设置为 temp 值之前释放它。
-
您能否展示可以编译以重现错误的最小代码示例?