Я новичок в программировании на C, и я не смог найти решение моей проблемы. Несмотря на то, что код работает (я был в состоянии включить его в другой программе), когда он пытается освободить память, назначенный calloc(), он возвращает следующую ошибку:Освобождение массива mpc_t в C
free(): invalid next size (normal):
followd тем, что, как представляется, адрес памяти. Я использую библиотеки 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;
}
Благодарим за помощь!
Условие в вашем цикле for должно быть 'i
mch
@mch - хороший улов; ваш комментарий должен быть ответом. –
Спасибо @mch! Это решает проблему. Итак, что я пытаюсь сделать с моим ошибочным кодом - хранить N-1 mpf_t в пространстве, которое может обрабатывать только N-2 mpf_t. Я думал, что это вызовет ошибку сегментации или что-то в этом роде. –