动态申请内存问题——是编译器错误吗?
#include<stdio.h>#include <stdlib.h>
#define T 15
#define N 8
int i,t;
float *length;
float *x;
float *v;
float *gap;
length=(float *)malloc(sizeof(float)*N);
x=(float *)malloc(sizeof(float)*N*T);
v=(float *)malloc(sizeof(float)*N*T);
gap=(float *)malloc(sizeof(float)*N*T);
if (length==NULL)printf("length申请不成功");
if (x==NULL)printf("x申请不成功");
if (v==NULL)printf("v申请不成功");
printf("\nv=%p,x=%p,*v=%f,*x=%f\n",v,x,*v,*x);
for(i=0;i<N/2;i++){//问题点
for(t=0;t<T/2;t++){
*(x+t*N+i)=i+1;
*(v+t*N+i)=i+2;
*(gap+t*N+i)=i+3;
printf("x[%d][%d]=%f,",t,i,*(x+t*N+i));//该段必须存在,不然,程序崩溃
printf("v[%d][%d]=%f,",t,i,*(v+t*N+i));
printf("gap[%d][%d]=%f,",t,i,*(gap+t*N+i));
}
printf("\n");
}
free(x);free(v);free(length);free(gap);
--------
问题点在于,申请了空间,空间可以用,但是free不了。如果用了中间用了中间的那三句 prinft(....);,而赋值那三句,可用可不用。,就可以free,如果不用,则出现错误。
请各位指点程序是错在哪里,我怀疑是编译器问题。