Я пытаюсь закодировать функцию, которая генерирует N число матриц 3x3 (алгоритм рекурсивного удвоения). Следующий код вызывает ошибку.Ошибка при использовании свободной команды в C
#define N 4
#include<stdio.h>
#include<stdlib.h>
void CReduce(double*,double*,double*,double*,double*); //Cyclic reducer
int main()
{
double *a,*b,*c,*d,*x;
int size = N*sizeof(double);
int i;
a = (double*)malloc(size);
b = (double*)malloc(size);
c = (double*)malloc(size);
d = (double*)malloc(size);
x = (double*)malloc(size);
//assign vector values-change later
for(i=0;i<N;i++)
{
b[i] = 2.0;
a[i] = c[i] = -1.0;
d[i] = 0.0;
}
d[N-1] = 1.0;
a[0] = 1.0;
c[N-1] = 1.0;
CReduce(a,b,c,d,x);
//for(i=0;i<N;i++) printf("%d %lf\n",i,x[i]);
free(a);
free(b);
free(c);
free(d);
free(x);
return 0;
}
void CReduce(double* a,double* b,double* c,double* d,double* x)
{
double *B,*C;
int i;
B = (double*)malloc(N*3*3);
C = (double*)malloc(N*3*3);
a[0] = 1.0;
c[N-1] = 1.0;
for(i=0;i<N*3*3;i++) B[i]=C[i]=0.0;
free(B);
free(C);
}
Я не полностью закончил код, но при запуске кода он уже производит следующую ошибку.
*** glibc detected *** ./a.out: free(): invalid next size (fast): 0x00000000023f4100 ***
Может ли кто-нибудь вести меня о том, какую ошибку я делаю? Спасибо.
+1: также обратите внимание, что выдача результата malloc больше, чем просто лишняя, он может маскировать потенциально полезные предупреждения компилятора –
'(double *)' не лишний, он делает код C++ совместимым! – vsz
@vsz, совместимость кода между C и C++ полна подводных камней, это один. Единственное, что надежно работает, - совместимость интерфейса. C++ - это другой язык, выделение в C++ должно выполняться с помощью 'new'. –