QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1415|回复: 7

在几个论坛问过了 没人给我回答! 奇怪的程序运行结果

[复制链接]
发表于 2005-8-6 20:10:04 | 显示全部楼层 |阅读模式
#include<stdlib.h>
#include<string.h>
main()
{
double a=-1234.5;
double b=12233;///////////////////////////////////////1
char *ptr;
int i;
int decpt,sign;
gcvt(a,6,ptr);
printf("%d\n",strlen(ptr));
for(i=0;i<7;i++)
printf("num.%d value=%c\n",i+1,ptr);
gcvt(b,6,ptr);////////////////////////////////////////////2
printf("%s\n",ptr);/////////////////////////////////////////3

}
这个程序的功能是把数字转换字符串!
在编译 这段程序时 当我注释掉2和3 它程序会运行,结果也正确
当我同时注释掉1和2和3时 程序编译gcc通过
但是当我./a.out要它执行时 提示段错误!
我这里并不需要用到b 和gcvt(b,6,ptr); 和 printf("%s\n",ptr);
为什么就段错误呢
发表于 2005-8-7 16:15:16 | 显示全部楼层
从注释掉1就段错误,可以猜测是用到了b所占的那8个字节
你把double b改成 int b1, b2看看结果是不是一样的
把你的gcvt贴出来分析一下
回复

使用道具 举报

发表于 2005-8-7 17:20:23 | 显示全部楼层
ptr没分配内存。
回复

使用道具 举报

发表于 2005-8-8 16:50:05 | 显示全部楼层
就是,不知道你的gcvt干了些什么。如果该函数有分配内存的操作,你应该在程序结束之前释放它,当然不释放也不会造成运行错误。如果没有的话,错误就很明显啦,你没分配内存而已,ptr访问了不该访问的内存。
回复

使用道具 举报

发表于 2005-8-9 11:01:30 | 显示全部楼层
你的问题在于没有理解指针

如果你要用gcvt为ptr分配内存,应该是gcvt(x,x, &ptr);

为什么b删除了段错误?,恐怕是使用b的时候恰巧ptr指向了一段可用的内存。
回复

使用道具 举报

发表于 2005-8-9 11:56:54 | 显示全部楼层
申明的时候应该 char str[25]; 吧给str空间
回复

使用道具 举报

发表于 2005-8-9 15:22:04 | 显示全部楼层
gcvt 是 glibc 的库函数。需要指向一个分配的 buf 才能传递给 gcvt
参考:gcvt(3)
回复

使用道具 举报

发表于 2005-8-19 02:50:12 | 显示全部楼层
ptr是一个没有分配内存的指针……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 13:32 , Processed in 0.071556 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表