Malloc - Incorrect Checksum for Freed Object

Discussion in 'Mac Programming' started by datscha, Feb 9, 2012.

  1. macrumors newbie

    Joined:
    Jan 31, 2012
    #1
    Hi all,

    Still working on the same project, I have an error I never had before.

    Code:
    Complex* fft(Complex* x)
    {
        int N = sizeof(x)/sizeof(double);
        Complex *w_out;
        w_out = (Complex*) calloc(sizeof(Complex), N);
        
        
        fftw_complex *in, *out;
        in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
        out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
        
        fftw_plan p;
        
        for (int j = 0; j < N; j++)
        {
            in[j][0] = x[j].GetReal();
            in[j][1] = x[j].GetImaginary();
        }
        
        p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
        
        fftw_execute(p);
        
        for (int i = 0; i < N; i++)
        {
            w_out[i].SetReal(out[i][0]);
            w_out[i].SetImaginary(out[i][1]);
            
        }
        fftw_destroy_plan(p);
        fftw_free(in); fftw_free(out);
        
        return w_out;
    }
    
    Above is the call from the Fast Fourier Transform, adapted to my program (cf. previous thread for the Complex class) and based on FFTW3 libraries.

    Further in my program, I call this function several times.
    One time in a function called fftMethod and two other times for frfftMethod.
    If the call is straight forward
    Code:
     y = fft(x); 
    and works fine for the fftMethod. It returns me this weird looking Malloc error for the frfftMethod which obviously comes from the fftw_free commands.
    Of course when I try to remove those commands, I get a segmentation fault error.

    So if you guys have any idea of what might be wrong, I'm pretty stuck here.

    D.


    PS: I have a reasonable doubt concerning my declaration of int N in my fft function, but didn't seem to be a problem before.
     
  2. thread starter macrumors newbie

    Joined:
    Jan 31, 2012
    #2
    Shame on me.

    Looks like it didn't like this kind of definition.

    My bad for the useless post!

    Newbie inside, bear with me ;)
     
  3. macrumors 6502

    Joined:
    Apr 24, 2008
    #3
    So how did you solve this? Did you decide to make your fft() function take a std::vector of Complex?

    By the way, is there a reason you're not using the C++ std::complex data type?
     
  4. macrumors G5

    gnasher729

    Joined:
    Nov 25, 2005
    #4
    Look at the line where N is calculated.
     

Share This Page