程序是一个简易的计算器
在运行一次后想按#号结束,但是会进入无限循环。问问各位怎么解决
#include"math.h"
#include"stdio.h"
main()
{
float fnum1,fnum2;
char chOP='0';
while(chOP!='#')
{
printf("请输入计算式。");
scanf("%f%c%f",&fnum1,&chOP,&fnum2);
if(fabs(fnum1)<1e-6)
break;
switch(chOP)
{
case'+':printf("%f%c%f=%f\n",fnum1,chOP,fnum2,fnum1+fnum2);
break;
case'-':printf("%f%c%f=%f\n",fnum1,chOP,fnum2,fnum1-fnum2);
break;
case'*':printf("%f%c%f=%f\n",fnum1,chOP,fnum2,fnum1*fnum2);
break;
case'/':if(fabs(fnum2)>1e-6)
printf("%f%c%f=%f\n",fnum1,chOP,fnum2,fnum1/fnum2);
else
printf("除数不能为0");break;
default:printf("未知运算符。");break;
}
}
}
释放了,但没完全释放
//4.使用free释放动态内存中的一部分
int main()
{
int* p = malloc(10 * sizeof(int));
if (p == NULL)
{
return 1;
}
int i = 0;
for (i = 0; i < 5; i++)
{
*p++ = i;//我的p不见了
}
free(p);//err
p = NULL;
return 0;
}
*在这个代码中,由p指针指向的动态内存开辟后,我们的p在后续操作中改变了它自己的值,这意味这什么?
这代表没东西再可以找到这块空间了,我们到时候free§只是free()掉了p后面的一些空间,那么p前面的空间呢?不管了?
所以如果p这个位置改变了,找不到了是一件很可怕的事情。
那么,我们如何避免呢?
如果在后续我们要操作p,我们一开始就要用另一个的指针变量来记录我一开始p的位置,最后free()这个记录起始位置的指针变量,这样就可以避免“free()了,但没完全free()的问题”