Valgrind найти ошибку, которую я не понимаю - PullRequest
1 голос
/ 08 апреля 2019

Я написал следующую функцию

void x_dealiasing(int scounts, int nx, int nxd, FFT_SCALAR *u) {
    /* scounts = initial number of ny*nz modes */
    int stride_x, placeholder=0;
    int mode, i;
    for ( mode =0; mode < scounts; mode++) {
        stride_x = mode*nxd*2;
        for ( i = 0; i < 2*nx; i++) {
            u[placeholder] = u[stride_x+i];
            placeholder++;
            //printf("u[%d]= %g\n", placeholder, u[placeholder]);
        }
    }
}

Я протестировал программу с Valgrind, и она обнаружила ошибку.В отчете говорится:

=6084== Invalid write of size 8
==6084==    at 0x410BBF: x_dealiasing (fft_support.c:62)
==6084==    by 0x40F852: convol_trasp_1convol_trasp (convol_trasp.c:2250)
==6084==    by 0x414FAC: dnsdirect_1buildrhs (dnsdirect.c:2187)
==6084==    by 0x40EFF0: main (channel_mpi.c:3075)
==6084==  Address 0x24b09b98 is 0 bytes after a block of size 294,920 alloc'd
==6084==    at 0x4C29B7E: malloc (vg_replace_malloc.c:299)
==6084==    by 0x40E6B4: main (channel_mpi.c:2667)
==6084== 

К сожалению, я впервые использую Valgrind, и я только понял, что ошибка в fft_support.c:62 -> u[placeholder] = u[stride_x+i]; Но я не могу понять, в чем ошибка ..

У кого-нибудь есть какие-то советы или подсказки?

Спасибо

...