当我们使用一个整型数组函数时:没有用到malloc,编译器会对我们自己创造的数值直接释放掉,再去访问那个地址就是乱码的,比如:
int *getNext(char* S)
{
int m=strlen(S);
printf("%d---\n",m);
//int *next=(int*)malloc(4*m);
int next[15];
int i;
for(i=0;i<15;i++)
{
next[i]=i;
printf("%d ",next[i]);
}
return next;
}
int kmp (char* S, char* T)
{
int *next;
next=getNext(T);
int i;
printf("\n");
for(i=0;i<15;i++)
printf("%d ",next[i]);
//free(next);
for(i=0;i<15;i++)
printf("%d ",next[i]);
return 1;
}
这时候就需要用到malloc。就可以正常访问
int *getNext(char* S)
{
int m=strlen(S);
printf("%d---\n",m);
int *next=(int*)malloc(4*m);
int i;
for(i=0;i<15;i++)
{
next[i]=i;
printf("%d ",next[i]);
}
return next;
}
int kmp (char* S, char* T)
{
int *next;
next=getNext(T);
int i;
printf("\n");
for(i=0;i<15;i++)
printf("%d ",next[i]);
free(*next);
//next=NULL;
for(i=0;i<15;i++)
printf("%d ",next[i]);
return 1;
}
此时可以看到,指针释放后,依旧可以指到那个地方访问到原来的值,原因我感觉是这段内存告诉程序我已经释放了那部分内存,你可以使用的了。但是在未使用前依旧还是我原来保存的那个值。
同时,注意,一般我们free后需要将指针指向空。