使用malloc和realloc的最佳方式

时间:2013-04-18 18:00:44

标签: c++ malloc realloc

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

问题1。

我正在制作的游戏允许你创建自己的spacechip,知道这是我想知道最好重新分配当前内存的两倍,这是标准。或者为需要的顶点重新分配100个额外空间做些什么? 我自己认为第二种选择会更好但也许有一些我不知道的事情。

问题2

如果我有一个malloced正方形阵列[20] [4]如何将它重新分配为正方形[100] [4]?我是否将第一个阵列重新分配到100,然后将malloc 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);
}

我认为释放临时是一个好主意,但它只是让代码在不同的位置崩溃。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!

我刚刚意识到问题不在于realloc,而在于其他地方。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!

一些额外的信息。 我正在使用c ++ 我也在使用glm

1 个答案:

答案 0 :(得分:0)

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

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

做一点数学计算,计算用例需要的最大值,malloc。转向编码其他东西。调试realloc错误并不好玩。

相关问题