当我们使用一个整型数组函数时:没有用到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后需要将指针指向空。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)