나는 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. –
제안 - 모든 행/열에 대해 하나씩 배열을 할당 할 필요가 없도록 단일 배열 할당을 앞당겨 수행하는 것을 고려할 수 있습니다.그것은 "field-> cells = malloc (sizeof (golCell) * dimx * dimy * dimz)"입니다. – selbie
셀비 : 그게 n 차원으로하려고했을 때했던 것입니다. 그런 다음 위의 "3d 코드"를 작성한 다음 답변을 읽은 후 3D 배열을 만드는 복잡한 방법으로 3 단계로 저장 공간을 할당하고 마침내 이제는 제안한 시점에 있습니다. , 하. xD : #define GOL_3DTOLINEAR (x, y, z, dx, dy, dz) ((z) + ((y) * (dz))를 정의하는 의사 3d 배열에서 액세스 및 요소를 검색하는 사람들을 위해 :) + ((x) * (dz) * (dy))) –