안녕하세요. 프로젝트 하다가 막히는게 있어서 이렇게 질문 드립니다.
이미지를 나타내는 함수가 있다고 하죠. 하지만 이미지의 픽셀 사이즈(행 과 열)는 이미지를 넣기 전에 알수 없음으로,
malloc 함수를 사용하여 변수 float ** m 과 float *v 를 힙 영역에 넣어 두는건 이해하겠습니다.
처음에 m 이 가지는 값은 주소값이 되겠네요 더블포인터 플롯 형 이고요, row * sizeof(float *) 만큼의 바이트를 가지겠네요. (이 것을 그림으로 표현 하였을때 row 개의 박스(일차원 배열로)가 만들어 진다고 가정하고 하나의 row 박스에는 float * 형 주소들이 들어 온다고 하죠 )
그다음 이해가 가지 않는 부분은 왜 변수 float * v 를 정의할때 말록 함수 안에 바이트 크기가 rows * cols * sizeof(float) 인가요?
제 생각은 그냥 rows 없이 cols * sizeof(float) 이 되어야 할것 같은데요... 그래야 2차원 배열이 만들어 지지 않나요?
다른 또 하나는, v+= cols; 이 부분은 포인터 연산 부분 같은데 *(v+cols) 랑 동일한 문장인가요?
/* Allocate memory for a 2D float matrix of size [row,col]. This returns
a vector of pointers to the rows of the matrix, so that routines
can operate on this without knowing the dimensions.
*/
float **AllocMatrix(int rows, int cols)
{
int i;
float **m, *v;
m = (float **) malloc(rows * sizeof(float *));
v = (float *) malloc(rows * cols * sizeof(float)); <---------
for (i = 0; i < rows; i++) {
m[i] = v;
v += cols; <---------
}
return (m);
}