2014-07-07 6 views
0

나는 진동을 측정하기 위해 FRDM-KL25Z 보드를 사용하는 C++ 프로젝트에서 일하고 있습니다. 내 코드가 작동하지만 루프에서 실행해야합니다. 메모리에 문제가 있습니다. 값을 두 번 저장할 수있는 충분한 공간이 없습니다. 나는 free() 명령어를 사용했지만, 심지어 나는 내 기억을 되 찾을 수 없다. 누군가가 kiss-fft가 사용하는 모든 메모리를 청소하는 방법을 알고 있습니까? 무료 함수가 없거나 목록에있는 함수가 제대로 작동하지 않습니다.키스 FFT로 할당 된 메모리를 할당 해제하는 방법은 무엇입니까?

메모리를 한 번만 실행하고 결과를 표시 할 수있는 충분한 메모리가 있습니다. 이 함수로 루프를 만들려고했지만 자유 명령을 사용하더라도 초기 메모리를 되 찾을 수 없습니다.

{ 

void TestFftReal(const char* title, const kiss_fft_scalar in[L], kiss_fft_cpx out[L/2 + 1]) 
    kiss_fftr_cfg cfg; 
    cfg = kiss_fftr_alloc(L, 0/*is_inverse_fft*/, NULL, NULL); 

    if (cfg != NULL) { 
     size_t i; 
     kiss_fftr(cfg, in, out); 
     free(cfg); 
    /// Do stuff /// 
    } else { 
    printf("Not enough memory.\n"); 
     exit(-1); 
    } 
} 
+0

"내 기억이 돌아 오지 않을 것"이외에 더 많은 정보를 제공해야 할 것입니다. 문제를 설명하는 데 도움이되는 코드 스 니펫 (전체 코드베이스가 아닌 관련 부분 만)이 있습니까? FFT를 수행 할 수있는 충분한 공간을 어떻게 확보 할 수 있습니까? 기타 ... – Ross

답변

2

kiss_fft.h 파일에는 KISS_FFT_USE_ALLOCA 스위치가 나열되어 있습니다. 컴파일하는 동안이 매크로를 정의하면 필요한 메모리가 malloc 대신 스택에 할당됩니다. 함수가 끝나면 자동으로 해제됩니다.

공간을 할당하고 fft를 실행하는 함수를 포함하도록 루프 본문을 작성해야하므로 다음 루프 반복 전에 공간을 반환합니다.

+0

감사 UncleO. 실제로 문제는 해결하기가 더 쉬웠습니다. 나는 내 정보를 출력하기 위해 cout <<을 사용했다. 웬일인지 그것이 나의 모든 기억을 차지하고 있었다. 방금 printf 명령을 변경하고 지금은 잘 작동합니다! (나는 단지 이것을 알아 내기 위해 2 일을 보내었다 hahaha) – Will