한 함수 호출에서 다른 블록에 대한 포인터 배열로 메모리의 첫 번째 부분을 가진 인접한 메모리 블록을 만들려고합니다. 기본적으로 다음을 시도하고 있습니다.malloc을 사용한 연속적인 메모리 블록
int **CreateInt2D(size_t rows, size_t cols)
{
int **p, **p1, **end;
p = (int **)SafeMalloc(rows * sizeof(int *));
cols *= sizeof(int);
for (end = p + rows, p1 = p; p1 < end; ++p1)
*p1 = (int *)SafeMalloc(cols);
return(p);
}
void *SafeMalloc(size_t size)
{
void *vp;
if ((vp = malloc(size)) == NULL) {
fputs("Out of mem", stderr);
exit(EXIT_FAILURE);
}
return(vp);
}
하지만 한 블록으로.
int *Create2D(size_t rows, size_t cols) {
int **memBlock;
int **arrayPtr;
int loopCount;
memBlock = (int **)malloc(rows * sizeof(int *) + rows * cols * sizeof(int));
if (arrayPtr == NULL) {
printf("Failed to allocate space, exiting...");
exit(EXIT_FAILURE);
}
for (loopCount = 1; loopCount <= (int)rows; loopCount++) {
arrayPtr = memBlock + (loopCount * sizeof(int *));
//I don't think this part is right. do I need something like arrayPtr[loopCount] = ....
}
return(memBlock);
}
나는 당신의 대답을 얻는다고 생각하지만 행 포인터와 열에 대한 메모리 할당 아이디어에 문제가 있습니다. 따라서 메모리 블록 cb를 사용하면 pmem 부분을 부분 캐스팅하기 만하면됩니다. 포인터에 대한 포인터 인 첫 번째 파트와 마찬가지로 마지막 행 포인터를 가리키는 pcol이 다음 cols를 초기화하고 포인터 포인터가 pcol을 가리키는 포인터를 갖습니다. 그게 뭔가? – Crystal
예. 합계를 할당 한 다음 포인터 계산을 사용하여 prow에 할당 할 부분 이후의 첫 번째 주소에 대한 pcol 포인터를 얻은 다음 pcol 포인터를 걷고 prow 배열을 초기화하는 데 사용합니다. 최종 결과는 하나의 할당이지만 원래 코드와 동일한 레이아웃으로 이루어집니다. –
@Crystal : 코드를 다시 확인하십시오. 루프에 버그가 있습니다. 죄송합니다. –