求达人指点 c语言指针问题

zhuran 发布于 2013/02/27 18:40
阅读 322
收藏 0

上代码

char x(char *a,char *b)
{
     
    *a=15;
    *b=16;
    return 1;
}
 
char xx(char *a )
{
    
    *a=115;
    
    return 1;
}
 
int main(int argc, char *argv[])
{
      char bb,*cc;
      char b,*c,*d;
      
       bb=xx(cc);
       printf("cc %d\n",*cc);
      
       b=x(c,d);
       printf("c %d d %d\n",*c,*d);
 }  
输出执行答案:cc 115  后面一个print是乱码

求解


加载中
0
gnefil.nil
gnefil.nil

全部指针没有分配内存,cc=(char*)malloc(1);b=(char*)malloc(1);c=(char*)malloc(1);

0
zhuran
zhuran
补充 后来我把该程序加到一个while里,放到powerpc平台上跑 输出cc 115 c 15 d 16 ,Trace/breakpoint trap 。然后进程自动退出了。
0
zhuran
zhuran
求高人帮助 谢谢
0
dreamers
dreamers
这个代码在linux gcc下根本运行不了。。。
0
zhuran
zhuran

引用来自“gnefil.nil”的答案

全部指针没有分配内存,cc=(char*)malloc(1);b=(char*)malloc(1);c=(char*)malloc(1);

加这段ok了十分感谢!!

再弱弱的问一句 char *c 不是临时分配了内存了吗?

心有未来
心有未来
char *c只是给c分配存储地址信息的空间而已
0
心有未来
心有未来
由于你未分配存储空间,在函数中的赋值操作使指针指向的是临时空间,当你在函数外执行解引用时,指针所指向空间的值是未定义的,自然乱码。
0
zhuran
zhuran

引用来自“心有未来”的答案

由于你未分配存储空间,在函数中的赋值操作使指针指向的是临时空间,当你在函数外执行解引用时,指针所指向空间的值是未定义的,自然乱码。

谢谢指点。

我也觉得不分配内存不妥,可是那为什么第一个printf能够打出115呢 我觉得第一个printf也应该是乱码啊

心有未来
心有未来
这只是内存分配出现的一个巧合而已,建议看下内存分配的相关知识。
0
四彩

这种程度的用不上malloc吧?

int main(int argc, char *argv[])
{
      char bb,cc;
      char b,c,d;
      
       bb=xx(&cc);
       printf("cc %d\n",cc);
      
       b=x(&c,&d);
       printf("c %d d %d\n",c,d);
 }
0
zhuran
zhuran

引用来自“四彩”的答案

这种程度的用不上malloc吧?

int main(int argc, char *argv[])
{
      char bb,cc;
      char b,c,d;
      
       bb=xx(&cc);
       printf("cc %d\n",cc);
      
       b=x(&c,&d);
       printf("c %d d %d\n",c,d);
 }

这样写是可以,只是原程序的本意不是这个。 呵呵

我只是为了方便请教大家,才简写成这样的。

返回顶部
顶部