相同代码在不同编译器下的执行问题?
#include <stdio.h>
#include <stdlib.h>
void fun(double *p1,double *p2,double *s)
{
s=(double *)calloc(1,sizeof(double));
*s=*p1 + *p2++;
}
int main()
{
double a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
fun(a,b,s);
printf("%5.2lf\n",*s);
return 0;
}
上述代码在vc++6.0中正常执行,输出 1.10,可是在codeblocks 16.01(32位)编译器下输出的却是-0.00,我debug了下也没找出原因,请问这是为什么呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我的运行结果也是没问题的,那就是CodeBlock的原因了,建议你一步一步看看内存里发生了什么。
还有你这个程序的目的是什么?是在学习指针吗?
没有特别看明白你这个程序的目的是干嘛?是验证calloc的什么东西?
另外调用
fun
的目的是什么,指针s传入之后又重新赋值了,也就是说你最终调用的*s就是a[0]的值,fun的调用对最终输出没啥影响你这个代码明显有问题,你确定两个编译器里写的同样的代码吗?依我看,那个函数的第三个参数s应该是一个二级指针或者指针的引用。
你这个有点像easyui的treegrid、为什么不用easyui框架来布局呢