我寫了一個3維C實現的Game of Life by John Conway。現在,我想讓代碼安全的出錯。 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;
}
如果我真的檢查每個分配分配錯誤?這也需要我釋放已分配的存儲空間。
檢查指針是否爲空是令人眼花繚亂的快速上任何現代的CPU。 – 2012-03-11 21:11:41
建議 - 你可以考慮預先做一個單獨的數組分配,所以你不必爲每一行/每列做一個數組。這就是「field-> cells = malloc(sizeof(golCell)* dimx * dimy * dimz)」 – selbie 2012-03-12 04:50:45
selbie:這就是我在做n維時所做的,但這很複雜。然後,我從上面提出了「3d代碼」,然後,在閱讀答案後,用一種複雜的方式創建一個3D數組,但分配了3個步驟的存儲空間,最後我現在處於您建議的位置, 哈。 xD對於任何搜索訪問和元素線性映射的僞3D數組的方法:#define GOL_3DTOLINEAR(x,y,z,dx,dy,dz)((z)+((y)*(dz) )+((x)*(dz)*(dy)))' – 2012-03-12 14:32:21