2016-07-06 2 views
0

나는 mex 코드를 쓰고 있는데, 나는 매우 효율적으로 메모리를 사용하지 않을 것이라고 생각하고있다. 여기 내가하는 일이있다. 나는 문제는 내가 밖으로 변수에 할당 메모리를 해제하지 오전입니다mex 코드로 메모리 풀기

out=mxMalloc(sizeof(double)*N); 

plhs[0]=mxCreateDoubleMatrix(1,N,mxREAL); 

set(plhs[0],out); 

처럼라는 변수에 대한 메모리를 할당하고 내가 matlab에에서 사용하기 때문에 내가 분할 오류가 발생합니다한다면 때문이다. 그렇다면 누구나 위의 명령을 수행하는 데 더 좋은 기술을 제안 할 수 있습니까? 어쨌든 메모리를 없애거나 길이 1X N의 행렬을 정의하지 않도록 할 수 있습니까?

감사합니다.

답변

2

mxMalloc과 함께 배열을 할당 할 필요는 없습니다. mxCreateDoubleMatrix이미은 배열을 할당합니다. 이 데이터에 대한 포인터 (mxGetPr을 사용하여 얻음)를 얻으면 배열에 필요한 값을 채울 수 있습니다.

double *out; 

// Allocate memory for the first output 
plhs[0] = mxCreateDoubleMatrix(1,N,mxREAL); 

// Get the pointer to the output data 
out = mxGetPr(plhs[0]); 

// Run your algorithm here to populate out with the data you need 

어떤 이유로 당신이 다른 방법으로 out를 만들 수 필요성을 경우

, 당신은 메모리를 해제하기 전에 출력으로 그 별도의 배열의 내용을 복사 할.

double *out; 
double *realout; 

// Allocate data to use internally 
out = mxMalloc(sizeof(double) * N); 

// Initialize the array that will be returned to MATLAB 
plhs[0] = mxCreateDoubleMatrix(1, N, mxREAL); 
realout = mxGetPr(plhs[0]); 

// Now copy all values to the MATLAB output 
for (j = 0; j < N; j++) 
    realout[j] = out[j]; 

// Now you can free up memory for out 
mxFree(out) 
+0

우리가 plhs [0 [출력을 가리키고있는 것처럼 보인 것을 plhs [0]에 할당하려고합니다. 내 경우에는 데이터 1XN 벡터이며 plhs [0] 내 matlab 출력됩니다 할당하려고합니다. 당신은 당신의 대답에 대해 정교하게 말할 수 있습니까? 또한 당신의 결과물과 저의 결과가 같은지 말해 줄 수 있습니까? – justin

+0

@justin 미안하지만, 나는 'out'을 의미했습니다. 처음에는'mxCreateDoubleMatrix'를 사용하여'out'을 할당 한 다음 나머지 mex 파일 안에 채울 수 있습니다. 별도로 할당 할 필요가 없습니다. – Suever