C语言——动态内存管理(经典例题)

题1、

 

为什么会崩溃呢?🤔🤔🤔

#include <stdio.h>
#include <stdlib.h>
#include <string.h>void GetMemory(char** p)
{*p = (char*)malloc(100);
}
void Test(void)
{char* str = NULL;GetMemory(&str);strcpy(str, "hello world");printf(str);//okfree(str);str = NULL;
}int main()
{Test();return 0;
}

我们可以用二级指针来进行接收,这样在malloc的时候*p找到的就是str的地址,然后malloc申请的空间就是str所指向的了,这样就不会发生解引用NULL的操作了。 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>char* GetMemory()
{char* p = (char*)malloc(100);return p;
}void Test(void)
{char* str = NULL;str = GetMemory();strcpy(str, "hello world");printf(str);//okfree(str);str = NULL;
}int main()
{Test();return 0;
}

或者我们可以将p作为返回值返回,并将其赋值给str,这样也可以解决这个问题。 

 题2、

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* GetMemory(void)
{char p[] = "hello world";return p;
}void Test(void)
{char* str = NULL;str = GetMemory();printf(str);
}int main()
{Test();return 0;
}

 

这个没办法正常输出的原因是什么呢?

题3、

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int* test()
{int a = 10;return &a;
}int main()
{int* p = test();printf("haha\n");printf("%d\n", *p);return 0;
}

 在这个代码里,a只是一个局部变量,在函数里定义了a之后,我们取地址将a的地址返回,a的这块空间,实际上已经被销毁了,所以我们在打印的时候,再去这块地址所指向的空间里找的时候,a就已经被销毁了。

 题4、

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Test(void)
{char* str = (char*)malloc(100);strcpy(str, "hello");free(str);if (str != NULL){strcpy(str, "world");printf(str);}
}int main()
{Test();return 0;
}

要修改这个错误我们只需要在free过后,及时的将其置空。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/439605.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SV-8003V 网络寻呼话筒

SV-8003V是深圳锐科达电子有限公司的一款桌面式对讲主机SV-8003V同样作为广播对讲系统的核心组成部分&#xff0c;集成有全区广播、分区广播、单点呼叫、点对点对讲、以及监听等功能。SV-8003V使用铝合金拉丝面板&#xff0c;并配有高性能的鹅颈麦克风以及高保真的全频喇叭&…

如何获得《幻兽帕鲁》隐藏帕鲁唤夜兽?13000个配种配方查询 幻兽帕鲁Steam好评率还在涨 Mac苹果电脑玩幻兽帕鲁 Crossover玩Windows游戏

《幻兽帕鲁》是一款Steam平台热门游戏&#xff0c;开放式大陆和养成式冒险结合&#xff0c;成为2024首款热门游戏&#xff0c;不过由于官方仅发布了Windows版的游戏客户端&#xff0c;Mac用户无法直接玩&#xff0c;好在有Crossover这样的神器&#xff0c;让苹果电脑也能玩上《…

FastBee开源物联网平台2.0开源版发布啦!!!

一、项目介绍 物美智能(wumei-smart)更名为蜂信物联(FastBee)。 FastBee开源物联网平台&#xff0c;简单易用&#xff0c;更适合中小企业和个人学习使用。适用于智能家居、智慧办公、智慧社区、农业监测、水利监测、工业控制等。 系统后端采用Spring boot&#xff1b;前端采用…

Django学习资料

相关链接 Django官网&#xff1a;The web framework for perfectionists with deadlines | Django Django 文档&#xff1a;Django 文档 | Django 文档 | Django

uniapp如何添加多个表单数组?

目录 一、实现思路 二、实现步骤 ①view部分展示 ②JavaScript 内容 ③css中样式展示 三、效果展示 四、小结 注意事项 总结模板&#xff1a; 一、实现思路 1.在 data 中定义一个数组&#xff0c;用于存储表单项的数据 2.在模板中使用 v-for 指令渲染表单项 3.在 methods 中…

2023年算法CDO-CNN-BiLSTM-ATTENTION回归预测(matlab)

2023年算法CDO-CNN-BiLSTM-ATTENTION回归预测&#xff08;matlab&#xff09; CDO-CNN-BiLSTM-Attention切诺贝利灾难优化器优化卷积-长短期记忆神经网络结合注意力机制的数据回归预测 Matlab语言。 切诺贝利灾难优化器Chernobyl Disaster Optimizer (CDO)是H. Shehadeh于202…

对于gzip的了解

gzip基本操作原理&#xff1a;通过消除文件中的冗余信息&#xff0c;使用哈夫曼编码等算法&#xff0c;将文件体积压缩到最小。这种数据压缩方式在网络传输中发挥了巨大作用&#xff0c;减小了传输数据的大小&#xff0c;从而提高了网页加载速度。 静态资源 Vue Vue CLl修改v…

全新PHP短网址生成系统,短链接生成系统,URL缩短器系统源码

PHP短网址系统URL缩短器平台&#xff0c;它使您可以轻松地缩短链接&#xff0c;根据受众群体的位置或平台来定位受众&#xff0c;并为缩短的链接提供分析见解。 系统使用了Laravel框架编写&#xff0c;前后台双语言使用&#xff0c;可以设置多域名&#xff0c;还可以开设套餐等…

SpringCloud--OpenFeign解析

一、OpenFeign简介 OpenFeign是一个声明式的Web服务客户端&#xff0c;它简化了与HTTP API的通信。它的底层原理主要基于Java的反射和动态代理&#xff0c;并且通过利用Spring AOP 框架、RestTemplate、Ribbon 和 Hystrix 等组件&#xff0c;将复杂的 HTTP 调用封装起来&#…

游泳耳机哪个牌子好?游泳耳机型号排行榜单帮你选!

游泳是一项绝佳的全身运动&#xff0c;不仅可以增强体能&#xff0c;还能锻炼身体、减轻压力。然而&#xff0c;在游泳的时候&#xff0c;我们常常感到无聊&#xff0c;缺乏动力。怎么办呢&#xff1f;这时一个出色的游泳耳机就显得尤为重要。今天&#xff0c;我将向大家介绍一…

Redis 面试题 | 19.精选Redis高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【三维重建】运动恢复结构(SfM)

运动恢复结构是通过三维场景的多张图像&#xff0c;恢复出该场景的三维结构信息以及每张图片对应的摄像机参数。 欧式结构恢复(内参已知&#xff0c;外参未知) 欧式结构恢复问题&#xff1a; 已知&#xff1a;1、n个三维点在m张图像中的对应点的像素坐标 2、相机内参 求解&…