(不要不屑一顾,以为简单吗,做一下试试,各位请不要调试后,洋洋得意的再来贴出答案)
 
内存管理 测试题:做以下试题请遵循 
1、 依次 做,不要做之前通览!!!!!!!
2、 非上机题,请用你的大脑
试题:
1、
  void GetMemery(char *pstr)
  {    
     pstr = (char *)malloc(100);
  }
  void main()
  {
     char *str = NULL;
     GetMemery(str);
     strcpy(str, "hello");
     printf(str);
  }
  此程序运行有什么结果?有什么不妥吗?2、
   void GetMemery(char **pstr)
   {
      *pstr = (char *)malloc(100);
   }
   void main()
   {
      char *str = NULL;
      GetMemery(&str);
      strcpy(str, "hello");
      printf(str);
   }
3、
   void GetMemery(char **pstr)
   {
      *pstr = (char *)malloc(100);
   }
   void main()
   {
      char *str = NULL;
      GetMemery(&str);
      strcpy(str, "hello");
      pintf(str);
      free(str);
      if (str != NULL)
         printf(str);
   }
   此程序运行有什么结果?有什么不妥吗?其他:(请仔细思考)1、/*******************************************************/  char str[100];
  //sizeof(str) = ?/*******************************************************/   char *p = (char *)malloc(sizeof(char)*100);
  //sizeof(p) = ?/********************************************************/  void Test(char *p)
  {
     //sizeof(p) = ?     
  }/**********************************************************/  void Test2(char str[100])
  {
     //sizeof(str) = ?
  }/**********************************************************/  void main(char str[100])
  {
     char str[100];
     //sizeof(str) = ?
  }/************************************************************/

解决方案 »

  1.   

    最后的写错了,是
    /**********************************************************/  void Test3(char str[100])
      {
         char str[100];
         //sizeof(str) = ?
      }/************************************************************/
      

  2.   

    还是错了,应该是:
    /**********************************************************/  void Test3( )
      {
         char str[100];
         //sizeof(str) = ?
      }/************************************************************/
      

  3.   

    1、
    非法操作,因为str= NULL.
    2、
    hello
    内存泄漏
    3、
    hello
    非法操作其他:
    100 


    4 //char str[100]和char str[]等同
    100
      

  4.   

    我最喜欢做这样的问题了看起来简单,实质底藴挺丰富。答案虽然有了,但不好意思贴出来。好好琢磨,有什么新的想法贴出来和大家share and exchange!!!
      

  5.   

    1、内存泄露, 不可改变形参的值2、未释放空间。   3、free(str); 后str 并未付NULL
       条件if (str != NULL)一定成立1、
      char str[100];
      //sizeof(str) = 100/*******************************************************/   char *p = (char *)malloc(sizeof(char)*100);
      //sizeof(p) = 4/********************************************************/  void Test(char *p)
      {
         sizeof(p) = 4     
      }/**********************************************************/  void Test2(char str[100])
      {
         //sizeof(str) = 100
      }/**********************************************************/  void main(char str[100])
      {
         char str[100];
         sizeof(str) = ???????????
     }/************************************************************/
      

  6.   

    其实这道题就是靠了一下你是否理解函数调用的时候的参数传输机制。
    作为一般的函数调用,如果不是引用,那么编译器会给你产生一个temp
    变量,然后将调用的值付给temp 变量。准确地说是在stack中压入了一个
    值作为传递给函数的值。因此如果你传递一维的指针进去。在函数体里面,
    实际上你是给stack上的一个指针分配了内存。当函数退出的时候,stack
    被释放掉,因此这块内存就会泄漏。其他的题与此内容相关。
      

  7.   

    In355Hz(好象一条狗) 说得很对
      

  8.   

    我个人觉得splitter(小刚)没完全理解它们,内存泄漏只是所要考察的一个
    很小的方面。至于blue_coco(潘)则有点肤浅了。In355Hz(好象一条狗)说得不错,高手!!!
      

  9.   

    其实题目很简单:
    在c编译器中:
    1.形参是不分配内存的,但要做类型比配。
    2.被分配空间的指针变量用完后要释放,还要置为空。
    3.sizeof运算浮仅对变量的类型检查。
    所以,上面的错误显然而知了:t1,t2都没有释放分配的内存并置为空,t3没有置空。
    t2,t3的strcpy(str, "hello");应为strcpy(&str,"hello");/********************************************************/  void Test(char *p)
      {
         //sizeof(p) = ?     
      }/**********************************************************/

    /**********************************************************/  void Test2(char str[100])
      {
         //sizeof(str) = ?
      }/**********************************************************/
    是犯了形参是不分配内存的错误,不能用sizeof.
    以上是我的拙见。