1

我对使用 malloc 和 realloc 很陌生,我有几个问题。

问题 1。

我正在制作的游戏允许您创建自己的空间芯片,知道这一点我想知道重新分配两倍于标准的当前内存量是否更好。或者按照为所需顶点重新分配 100 个额外空间的方式做一些事情?我自己认为第二种选择会更好,但也许有些我不知道。

问题2

如果我有一个 malloced arrays[20] [4] 我如何将它重新分配到 squares[100][4] 的大小?我是否将第一个数组重新分配到 100,然后将 4 个新点重新分配到 20-99?

问题 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

4

1 回答 1

0

老实说,避免realloc多次使用。malloc一次并坚持下去,直到遇到极端情况,然后realloc(但即使那样,也要避免它!)

主要原因是调试和测试。如果程序在 处失败realloc,可能有多种原因……而且大部分来自操作系统。(即没有足够的内存,试图使用刚刚释放的内存等)这些都是难以重现和调试的错误。

做一些数学运算,计算出您的用例所需的最大值malloc。继续编写其他内容。调试realloc错误并不好玩。

于 2013-04-18T18:18:36.880 回答