c语言中的字符串指针释放free问题

str=(char *)malloc( sizeof(char) );scanf("%s",str);free(str);//出问题
2025-03-06 13:44:00
推荐回答(4个)
回答1:

1、free函数:
原型:void free(void *ptr);
功能:释放malloc(或calloc、realloc)函数给指针变量分配的动态内存;
头文件:malloc.h或stdlib.h;
2、为了避免释放已经释放了内存的指针内存,或没有释放内存,在C语言中最好是在定义指针时赋初值NULL,释放后立即赋NULL,释放时检查指针值再决定释放就避免释放错误了,例如:

int *a = NULL
int *b = (int*) malloc(sizeof(int) * 10);
a= b;
/* 执行大量操作后 */
if(a != NULL) {free(a);a=NULL;}
if(b != NULL) {free(b);b=NULL;}

回答2:

出问题的地方应该不是free而是scanf
你只申请了一个char即1B的内存空间, 只能存一个字符
当你以%s输入的时候注定的它至少2个字符, 一个就是你输入的一个字符,另一个就是\0
所以当你尽管只输入一个字符时,str指向的内存也存不下,这时产生越界
你把malloc里的改成 100 * sizeof(char)就可以了

回答3:

只申请了一个char的大小,也没有进行初始化赋值,free的时候找不到字符串的结尾的,所有出问题。估计第二句也会出问题。

回答4:

char表示的是字符,而%s表示的是字符串,两者不匹配