LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: jeffshia

一道c语言的改错题目,请大家考虑考虑

[复制链接]
发表于 2004-12-19 16:16:50 | 显示全部楼层
很显然,你申请了一个指向临时变量的指针,这个变量是存放在堆栈中,当程序退出之后,堆栈之中的变量就 被销毁了,所以你根本不可能得到返回的指针啊!
发表于 2004-12-19 16:49:21 | 显示全部楼层
请大家先搞清堆和栈的区别先
发表于 2004-12-19 16:54:00 | 显示全部楼层
程序的错误在于malloc 之后没有free,和传什么没关系
发表于 2004-12-19 19:02:37 | 显示全部楼层
Post by suowei1979
程序的错误在于malloc 之后没有free,和传什么没关系


呵呵,我不是接着楼主的问题讨论的
发表于 2004-12-20 00:34:05 | 显示全部楼层
如果用指针作为函数的形参,那么只能改变指针所指的区域的值,而改变指针本身的值对于实参无效。这和你传递一个整型变量到函数中,在函数中改变它的值并不会改变主函数中的实参值,是一个道理。除非 return.
发表于 2004-12-20 09:51:02 | 显示全部楼层
Post by herberteuler
呵呵,我不是接着楼主的问题讨论的

呵呵
那你就属于跑题,该罚
 楼主| 发表于 2004-12-20 10:17:33 | 显示全部楼层
这道题原本是这样的,请大家抓住重点讨论!谢谢!


  1. #include<stdio.h>
  2. #include<malloc.h>

  3. void foo(int a,char *b)
  4. {
  5.     b = (char *)malloc(64);
  6.     sprintf(b,"you are %d years old!\n",a);
  7. }

  8. int main(void)
  9. {
  10.    char *f;
  11.    foo(23,f);
  12.    printf("%s\n",f);
  13. }
复制代码
 楼主| 发表于 2004-12-20 10:20:57 | 显示全部楼层
如果用指针作为函数的形参,那么只能改变指针所指的区域的值,而改变指针本身的值对于实参无效。这和你传递一个整型变量到函数中,在函数中改变它的值并不会改变主函数中的实参值,是一个道理。除非 return.


那就是向我前面所说的,必须使用两级的指针才能传递过去指针了?
发表于 2004-12-20 11:14:17 | 显示全部楼层
Post by suowei1979
呵呵
那你就属于跑题,该罚

呵呵,罚什么啊,我认罚
发表于 2004-12-20 11:41:05 | 显示全部楼层
不知我这样修改大家有什么不同的观点:)

#include<stdio.h>
#include<malloc.h>

void foo(int a,char **b)
{
    sprintf(*b,"you are %d years old!\n",a);
}

int main(void)
{
   char *f = (char *)malloc(64);
   foo(23,&f);
   printf("%s\n",f);
   free(f);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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