我是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;
}
感谢您的帮助!
答案 0 :(得分:2)
你的for循环在i == N-2
之后中断,但它应该在之前中断。 for循环中的条件应为i<N-2
而不是i<=N-2
。
所以你试图访问超出界限的内存。这导致undefined behaviour
,因此任何事情都可能发生,包括分段错误,自由运行时错误或什么都没有。