C语言是一种很灵活的语言,在程序调试过程中常常会遇到一些难解决的问题,一般语法错误计算机能检测出来,而逻辑错误计算机则检测不出来。这给教师的教学带来比较多的麻烦,也大大削减了学生学习的自信心。所以我把易出错的知识点进行一一列举。
同学:这个动态分配的内存为啥释放会出错呢?
char *str = (char*)malloc(sizeof(char) * 10); str = "C语言Plus"; printf("%s", str); free(str);
老师:这个是因为你申请了之后,把指针的指向改变了,不再指向你申请的内存空间了,而是指向了静态区的字符串,所以释放的不是动态申请的空间,所以会出错。而且动态申请的空间还存在,只是你找不到了,所以需要给动态申请的空间赋值字符串请用strcpy,如下:
char *str = (char*)malloc(sizeof(char) * 10); strcpy(str, "C语言Plus"); printf("%s", str); free(str);
是吧,现在就没有错误了,一定要注意哦,后面结构体也会遇到这个问题