Освобождение массива mpc_t в C

Я новичок в программировании на C и не смог найти решение своей проблемы. Хотя код работает (я смог включить его в другую программу), когда он пытается освободить память, назначенную calloc(), он возвращает следующую ошибку:

free(): invalid next size (normal):

затем следует адрес памяти. Я использую библиотеки mpc (для комплексных чисел произвольной точности). Это самая маленькая программа, которая повторяет ошибку:

#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
#include <mpfr.h>
#include <mpc.h>

int N = 10;
int precision = 512;

int main(void) {
    mpc_t *dets2;
    dets2 = (mpc_t*)calloc(N-2,sizeof(mpc_t));

    for (int i = 0; i<=N-2; i++) {
        mpc_init2(dets2[i],512); //initialize all complex numbers
        mpc_set_str(dets2[i],"1",0,MPFR_RNDN); //set all the numbers to one
    }

    free(dets2); //release the memory occupied by those numbers
    return 0;
}

Спасибо за вашу помощь!

1 ответ

Решение

Ваш для разрывов цикла после i == N-2, но это должно сломаться раньше. Условие в вашем цикле for должно быть i<N-2 вместо i<=N-2,

Таким образом, вы пытаетесь получить доступ к памяти, которая находится за пределами. Это ведет к undefined behaviourТаким образом, может произойти все что угодно, включая ошибку сегментации, ошибку свободного времени или ничего.

Другие вопросы по тегам