leobegin2016 2017-04-17 00:29 采纳率: 100%
浏览 905
已采纳

下面c++代码怎么改,只修改getmemory函数,test函数没分配p的空间

#include
#include
#include

void GetMemory(char *p, int len)
{
p = (char *)malloc(len);
}

void Test(void)
{
char *p = NULL;
GetMemory(p, 100);
strcpy(p, "hello world");
printf("%s\n", p);
}

int main(void)
{
Test();

return 0;

}

  • 写回答

6条回答 默认 最新

  • 内核之道 PostgreSQL领域优质创作者 2017-04-17 01:05
    关注

    LZ:GetMemory()函数中p的堆区地址空间已经成功分配,但是该函数运行结束后,p会被释放;因为是存放在栈区,所以你想在Test()函数中
    通过赋值的形式把GetMemory()中申请的内存空间给p,这样是不会实现的,就像前面所说,GetMemory()函数运行结束后,指针p就会被释放,因此p
    不再指向分配的堆区空间。所以你在test()函数中去给堆区空间拷贝值,相当于操作野指针。
    下面代码已经调试好:

     #include<stdlib.h> 
    #include <string.h>
    #include<iostream>
    using namespace std;
    void GetMemory(char **p, int len)
        {
          *p = (char *)malloc(len*sizeof(char));
        }
    
    void Test(void)
        {
        char *p = NULL;
        GetMemory(&p, 100);
        strcpy(p, "hello world");
        printf("%s\n", p);
        }
    int main(void)
        {
    
        Test();
        return 0;
        }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛