私はGame of Life by John Conwayの3次元Cの実装を書いています。さて、コードをエラーに対して安全にしたいと思っています。 This yolinux.comの記事によると、安全なコードを書く。毎回割り当てエラーを本当にチェックしますか?
メモリ割り当てのエラーをチェックします。割り当てられなかった場合は解放できません。
私の質問は、本当に割り当てエラーが毎回確認する必要がありますか?それは私のコードを大幅に遅くする可能性があります。
inline int golField_Init(golField* field, golAllocProc alloc,
golOptions options, uint dimx, uint dimy, uint dimz) {
field->dimx = dimx;
field->dimy = dimy;
field->dimz = dimz;
field->cells = alloc(sizeof(golCell**) * dimx);
field->options = options;
if (!field->cells) return 1;
int x, y, z;
for (x = 0; x < dimx; ++x) {
field->cells[x] = alloc(sizeof(golCell*) * dimy);
for (y = 0; y < dimy; ++y) {
field->cells[x][y] = alloc(sizeof(golCell) * dimz);
for (z = 0; z < dimz; ++z) {
golCell_Init(&field->cells[x][y][z], 0);
}
}
}
return 0;
}
私は本当にそれぞれの配分に割り当てエラーをチェックする必要があります。ここでは抜粋ですか?それは既に割り当てられたストレージを解放する必要もあります。
ポインタがNULLであるかどうかをチェックする、高速に疑いの余地あるヌルポインタ、メモリリークなどへのアクセス:そう、いくつかの負の側面のいずれかになるに失敗
現代のCPU –
提案 - すべての行/列に対して1つの配列割り当てを行う必要がないように、単一の配列割り当てを行うことを検討することができます。それは "field-> cells = malloc(sizeof(golCell)* dimx * dimy * dimz)" – selbie
selbie:それはn次元でしようとしたときにやったことですが、それは複雑になりました。次に、私は上から "3d code"を思いついてから、答えを読んだ後、3d配列を作成するのにちょっと複雑な方法で3つのステップでストレージを割り当てていました。 、ha。 xD擬似3d配列のアクセスと要素を線形にマップする方法を探している人のために:#define GOL_3DTOLINEAR(x、y、z、dx、dy、dz)((z)+((y)*(dz) )+((x)*(dz)*(dy))) ' –