1

私は malloc と realloc を使用するのが初めてで、いくつか質問があります。

質問1。

私が作成しているゲームでは、独自のスペースチップを作成できます。これは、標準である現在のメモリの量の 2 倍を再割り当てする方がよいのではないかと考えていました。それとも、必要な頂点のために 100 個の余分なスペースを再割り当てするようなことをしますか? 私自身は、2番目のオプションの方が良いと思いますが、気付いていないことがあります。

質問2

正方形の割り当てられた配列がある場合[20] [4]、正方形のサイズ[100] [4]に再割り当てするにはどうすればよいですか? 最初の配列を 100 に再割り当てしてから、4 つの新しいスポットで 20 ~ 99 を malloc しますか?

質問 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);
}

一時を解放するのは良い考えだと思いましたが、コードが別の場所でクラッシュするだけです。

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

問題は再割り当てではなく、別の場所にあることに気付きました。

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

少し追加情報。私はc ++を使用しています。また、glmも使用しています

4

1 に答える 1

0

正直なところ、realloc複数回の使用は避けてください。malloc一度、極端なケースに遭遇するまでそれを続けてくださいrealloc

これの主な理由は、デバッグとテストです。プログラムが で失敗した場合realloc、それには複数の理由が考えられます...そしてそのほとんどは OS に起因します。(つまり、メモリが足りない、解放されたばかりのメモリを使おうとするなど) これらは、再現とデバッグが難しいバグです。

少し計算して、ユースケースに必要な最大値を計算しますmalloc。他のもののコーディングに進みます。reallocエラーのデバッグは楽しいものではありません。

于 2013-04-18T18:18:36.880 に答える