c++ 动态分配内存

x33g5p2x  于2022-01-09 转载在 C/C++  
字(0.7k)|赞(0)|评价(0)|浏览(471)

返回值策略

可以用函数返回值来传递动态内存。这中方法比“指针的指针”简单多了

  1. char *GetMemory(int num)
  2. {
  3. char *p = (char *)malloc(sizeof(char) * num);
  4. return p;
  5. }
  6. void Test(void)
  7. {
  8. char *str = NULL;
  9. str = GetMemory(100); //str指向了动态分配的空间
  10. strcpy(str, "hello");
  11. free(str)
  12. }

在使用返回值时,千万别返回指向“栈内存”的指针、引用,因为该内存在函数结束时自动消亡了,返回的指针是个野指针了。例如

  1. char *GetString()
  2. {
  3. char p[] = "hello world"; //数组内容存储在栈区,函数结束时,会释放掉return p;
  4. }
  5. void Test(void)
  6. {
  7. char *str = NULL;
  8. str = GetString(); //因为非配的内存早已释放掉,此时的str是个野指针,内容是垃圾
  9. cout << str << endl;
  10. }

在函数中不定义数组,定义指针,示例:

  1. char *GetString()
  2. {
  3. char *p = "hello world"; //数组内容存储在静态区,函数结束时,不会释放掉return p;
  4. }
  5. void Test(void)
  6. {
  7. char *str = NULL;
  8. str = GetString();
  9. cout << str << endl;
  10. }

此时的程序是正确的,但是有一点,此时分配的内存处于静态区,是只可以读取但是不可以修改的。

相关文章

最新文章

更多