有关gcvt函数segmentation( 段错误)的问题

hansyang 2008-05-22 03:21:07
代码:
1. #include<stdlib.h>
2. main()
3. {
4. double a=123.45;
5. char *ptr;
6. int decpt,sign;
7. gcvt(a,5,ptr);
8. printf(“a value=%s\n”,ptr);
9. }
如果注释掉第7行:int decpt,sign,则运行的时候出现segmentation fault(段错误),觉得奇怪的就是decpt和sign变量都没有使用怎么和程序有关系呢?段错误产生的原因一般是由于内存访问错误产生的.用gdb调试得到的信息如下:
Program received signal SIGSEGV,Segmentation fault.
0x4afac4b9 in __printf_fp () from /lib/libc.so.6
莫非gcvt函数有其他的机关?请知道的人回答.thank you in advance!
...全文
204 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xkyx_cn 2008-05-23
  • 打赏
  • 举报
回复
呵呵,互相帮助

“我要提问” 这排按钮的第三个就是结贴给分的
hansyang 2008-05-23
  • 打赏
  • 举报
回复
再次感谢你的回答!希望以后有问题能得到你一如既往的帮助.
因为首次在这里发帖,请问该如何给你分呢?
xkyx_cn 2008-05-23
  • 打赏
  • 举报
回复
哦,我昨天也没多想,其实定义者2个int变量是有玄机的:
多定义了这2个变量,编译器在栈上分配的内存至少多了 2*sizeof(int)字节
这些内存可能在gcvt()调用的过程中发挥了作用,导致好像没有错误发生
实际上,这些和编译器的实现有关,不是每个编译器都会做到这样
编译器是完全按程序员的指令去做的,也就是说完全信任程序员是对的
做为程序员,我们就要尽量do right,反之最终受伤害的只能是自己,因为找出这种bug会花费很多时间和精力

希望我说的对lz能有所帮助,编程路还很长,Good luck!

[Quote=引用 8 楼 hansyang 的回复:]
我刚刚学linux下的C编程不久,所以问的问题可能有点幼稚了,请你不要见怪,也希望你能耐心回答,我觉得每一个初学者都会问一些看似简单的问题,高手的指点对一个初学者尤为重要.我喜欢把问题弄清楚,心里才舒坦.我喜欢使用linux的感觉,自由自在.

可能我没有说清楚问题,我再表述一遍.
如果给ptr分配内存,ptr = malloc(sizeof(char));程序当然运行没有问题.
如果不给ptr分配内存,只要有:int decpt,sign; 程序的运行没有问题,是不…
[/Quote]
hansyang 2008-05-23
  • 打赏
  • 举报
回复
我刚刚学linux下的C编程不久,所以问的问题可能有点幼稚了,请你不要见怪,也希望你能耐心回答,我觉得每一个初学者都会问一些看似简单的问题,高手的指点对一个初学者尤为重要.我喜欢把问题弄清楚,心里才舒坦.我喜欢使用linux的感觉,自由自在.

可能我没有说清楚问题,我再表述一遍.
如果给ptr分配内存,ptr = malloc(sizeof(char));程序当然运行没有问题.
如果不给ptr分配内存,只要有:int decpt,sign; 程序的运行没有问题,是不是就可以说ptr分配到了内存了呢?

程序不能运行的原因就是因为ptr没有分配到内存,而增加了int decpt,sign;程序就可以运行,当然增加的语句和ptr分配内存有关系.要不然程序怎么就能正常运行呢?
xkyx_cn 2008-05-22
  • 打赏
  • 举报
回复
不是 ,这句现在看来完全没用,可以注释掉

我前面的回答都是针对问题的,lz的基础似乎还需要加强
hansyang 2008-05-22
  • 打赏
  • 举报
回复
应该没有关系才对啊.
hansyang 2008-05-22
  • 打赏
  • 举报
回复
有了下面的句子ptr就能分配内存啦?
int decpt,sign;
xkyx_cn 2008-05-22
  • 打赏
  • 举报
回复
分配多点:
ptr = (char*)malloc(sizeof(char)*25);

出错是在gcvt调用中

[Quote=引用 3 楼 hansyang 的回复:]
如何给ptr分配空间呢?用ptr = malloc(sizeof(char));吗?
ptr没有分配内存和第六行的
int decpt,sign;
有什么关系呢?
[/Quote]
hansyang 2008-05-22
  • 打赏
  • 举报
回复
如何给ptr分配空间呢?用ptr = malloc(sizeof(char));吗?
ptr没有分配内存和第六行的
int decpt,sign;
有什么关系呢?
xkyx_cn 2008-05-22
  • 打赏
  • 举报
回复
可以这样:
char ptr[25];

或者:
char *ptr = new char[25];
...
gcvt(a,5,ptr);
...
delete [] ptr;
xkyx_cn 2008-05-22
  • 打赏
  • 举报
回复
ptr没有申请内存空间

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧