none
这段代码出错的原因是什么? RRS feed

  • 问题

  • void GetMemory(char *p) { 
     //p = (char *)malloc(100);
     p = new char[100]; 
    } void Test(void) 
     char *str = NULL;
     GetMemory(str); 
     strcpy(str, "hello world");
     printf(str); 
    }
     int _tmain(int argc, _TCHAR* argv[]) 
    {
          Test(); 
    }

    something is OK.
    2009年8月12日 8:49

答案

  • void GetMemory(char **p)
     { 
        //p = (char *)malloc(100);
         *p = new char[100]; 
    }

     void Test(void) 
     char *str = NULL;
     GetMemory(&str); 
     strcpy(str, "hello world");
     printf(str); 
    }
     int _tmain(int argc, _TCHAR* argv[]) 
    {
          Test(); 
    }
    • 已标记为答案 Tim Li 2009年8月20日 9:17
    2009年8月12日 9:01
  • 因为char *str指针在参数传递时考贝了一份
    因此传递过去的将不是str

    可以这样
    void GetMemory(char*& p)
     { 
        //p = (char *)malloc(100);
         p = new char[100]; 
    }
    就明白了
    • 已标记为答案 Tim Li 2009年8月20日 9:17
    2009年8月12日 9:10
  • 你要想返回指针必须要传2重指针.
    void GetMemory(char **p)
     { 
         *p = new char[100]; 
    }

    void Test(void) 
     char *str = NULL;
     GetMemory(&str); 
     strcpy(str, "hello world");
     printf(str); 
     //必须要释放.
     delete str;
    }

    这样才能返回指针.

    0xBAADF00D
    • 已标记为答案 Tim Li 2009年8月20日 9:17
    2009年8月12日 10:01
    版主

全部回复

  • void GetMemory(char **p)
     { 
        //p = (char *)malloc(100);
         *p = new char[100]; 
    }

     void Test(void) 
     char *str = NULL;
     GetMemory(&str); 
     strcpy(str, "hello world");
     printf(str); 
    }
     int _tmain(int argc, _TCHAR* argv[]) 
    {
          Test(); 
    }
    • 已标记为答案 Tim Li 2009年8月20日 9:17
    2009年8月12日 9:01
  • 能解释下原因吗??
    something is OK.
    2009年8月12日 9:06
  • 因为char *str指针在参数传递时考贝了一份
    因此传递过去的将不是str

    可以这样
    void GetMemory(char*& p)
     { 
        //p = (char *)malloc(100);
         p = new char[100]; 
    }
    就明白了
    • 已标记为答案 Tim Li 2009年8月20日 9:17
    2009年8月12日 9:10
  • 能详细点吗 呵呵
    something is OK.
    2009年8月12日 9:28
  • 你要想返回指针必须要传2重指针.
    void GetMemory(char **p)
     { 
         *p = new char[100]; 
    }

    void Test(void) 
     char *str = NULL;
     GetMemory(&str); 
     strcpy(str, "hello world");
     printf(str); 
     //必须要释放.
     delete str;
    }

    这样才能返回指针.

    0xBAADF00D
    • 已标记为答案 Tim Li 2009年8月20日 9:17
    2009年8月12日 10:01
    版主
  • 实参和形参的问题,谭浩强的C语言就有讲得很清楚,楼主可以看一下

    2009年8月18日 8:10