Освобождение массива 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
Таким образом, может произойти все что угодно, включая ошибку сегментации, ошибку свободного времени или ничего.