这可能跟你的那几个strncpy的使用方式有关。我查了一下这个函数的手册,大致是这么说。这个函数在源比size大时,copy size个字符,不包括null。在源小于size时,向目标填充足够的null,直至size指定的大小,这是标准C规定的。
这意味着你的调用点会造成多个缓冲区越界,因为它们都被追加了很多0(我想你的几个参数应该都不到100大小吧?)
试着用正确的方式改写那部分再试试
任何时候都应该检查目标缓冲区是否有足够的空间容纳size个字节,当用memcpy或者strncpy这类函数时。
或空间是否不小于源缓冲区,当用strcpy这类自动检查null结尾的函数时,还要算上copy会自动包含的null结尾。
ctrl+s保存按理说没有错的,我这里有一个c-free
35的压缩包,你从新安装一个。不行的话,这个为问题是你这个软件的问题还是程序的保存路径问题,你把你的邮箱号给我,我实验了一遍我c语言也用的是c-free
你申请的是double类型的变量,在scanf与printf中应该用%lf,而不是%f;还有scanf("%f,%f",&r,&h);最好改成scanf("%lf%lf",&r,&h),即把逗号去掉,否则你的输入必须也有逗号,如:1,2。
下面是我改的代码:运行时可直接输入如:1 2 回车
#define PI 31415926
#include<stdioh>
#include<mathh>
void main()
{double r,h,l,s1,s2,v1,v2;
scanf("%lf%lf",&r,&h);
l=2PIr;
s1=PIpow(r,2);
s2=4PIpow(r,2);
v1=40/3PIpow(r,3);
v2=2PIpow(r,2)h;
printf("l=%lf\ns1=%lf\ns2=%lf\nv1=%lf\nv2=%lf\n",l,s1,s2,v1,v2);
}
以上就是关于C语言free的时候程序出错全部的内容,包括:C语言free的时候程序出错、c-free 错误问题、c-free运行出错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)