[c语言]malloc动态开辟内存空间
文章目录
- 一、malloc开辟空间,realloc增加空间内存
- 二、野指针
一、malloc开辟空间,realloc增加空间内存
//Test8.c
#include<stdio.h>
#include <stdlib.h>
#include <string.h>// char *strcpy(char *dest, const char *src);// void *malloc(size_t size);
// void free(void *ptr);
// void *calloc(size_t nmemb, size_t size);
// void *realloc(void *ptr, size_t size);int main()
{char *p;//野指针p = (char *)malloc(1);//p有了具体的内存指向,并且malloc被强转成char *型*p = 'c';free(p);//释放刚才开辟的内存p = NULL;p = (char *)malloc(12);if(p==NULL){printf("malloc error\n");exit(-1);}memset(p,'\0',12);//把刚才开辟的空间全赋值为0printf("需要扩容地址:%p\n",p);char *arr = "I will be successful";int len = strlen(arr);int new_len = len -12 +1;char *b = realloc(p,new_len);printf("扩容后的地址:%p\n",p);strcpy(p,arr);puts(p);free(b);return 0;
}
~
输出结果:
二、野指针
野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的。
野指针主要是因为这些疏忽而出现的删除或申请访问受限内存区域的指针。
- 指针变量未初始化:
任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。如果没有初始化,编译器会报错“ ‘point’ may be uninitialized in the function ”。
- 指针释放后之后未置空:
有时指针在free或delete后未赋值 NULL,便会使人以为是合法的。别看free和delete的名字(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。此时指针指向的就是“垃圾”内存。释放后的指针应立即将指针置为NULL,防止产生“野指针”。
如何最大可能规避这种风险呢?
在养成这些习惯的情况下,野指针的危害是可以降低的:
- 初始化时置 NULL
指针变量一定要初始化为NULL,因为任何指针变量(除了static修饰的指针变量)刚被创建时不会自动成为NULL指针,它的缺省值是随机的。
- 释放时置 NULL
当指针p指向的内存空间释放时,没有设置指针p的值为NULL。delete和free只是把内存空间释放了,但是并没有将指针p的值赋为NULL。
[c语言]malloc动态开辟内存空间相关推荐
- C语言_malloc动态开辟内存空间
malloc动态开辟内存空间 01--malloc动态开辟内存空间函数: 通常定义数组的时候就把内存地址定好了,比如: ind data[] = {1,2,3,4,5}; char cdata[6] ...
- C语言——动态开辟内存空间的函数
目录 为什么需要动态开辟内存空间? 1.malloc函数 2.free函数 3.calloc函数 4.realloc 为什么需要动态开辟内存空间? 我们已经熟悉了基本的内存开辟方法: int a = ...
- C语言 malloc动态申请内存,存放数组
代码 #include<stdio.h> #include<stdlib.h> int *plusOne() {int *array = NULL;array = (int * ...
- C语言动态申请内存空间之malloc(),calloc(),realloc()函数
在C语言中用于动态申请内存空间的函数主要为malloc()函数,calloc()函数,以及realloc()函数,以下主要介绍三个函数的用法,区别以及使用时的注意事项. malloc(),calloc ...
- C语言学习笔记——(三)静态开辟内存和动态开辟内存
注:编码工具是CLion+Cygwin64 目录 补充知识:C语言的布尔类型--非零即true. 静态开辟内存 静态开辟内存上限测试: 静态开辟内存特点: 静态开辟内存自动开辟和自动释放测试: 动态开 ...
- C语言 动态开辟内存管理
动态内存管理 malloc(用得最多) calloc realloc 常见的动态内存错误 malloc(用得最多) 函数原型:void* malloc (size_t size);参数为要申请空间的大 ...
- c++申请内存空间_有没有想过:malloc分配的内存空间地址连续吗
来自公众号:技术让梦想更伟大 提出问题 我们在写程序中经常会用到malloc函数进行动态内存分配,但是我们有没有想过,在C语言中,向操作系统请求malloc内存空间的地址是连续的吗??? 测试 我使用 ...
- C++学习之路抓紧跑路版(七)-动态申请内存空间
文章目录 前言 一.如何申请动态内存空间? 二.练习 总结 前言 今天我们来看下在C++中如何动态申请内存空间,不多比比 一.如何申请动态内存空间? 在C++中我们用new/delete来申请和释放内 ...
- C语言动态申请内存空间
为什么要动态内存申请 1.定义数组的时候数组的长度是预先定义好的,在整个程序中固定不变; 2.但是在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定 3.为了解决 ...
最新文章
- FullCalendar
- 汇编中的数组分配和指针
- 数据库索引的作用和长处缺点
- mysql 一次性导入数据库_Mysql 一次性备份导出/导入恢复所有数据库
- Charles调试Https Android
- 面向.NET开发人员的Dapr——状态管理
- 01章.计算机网络概述(1.7)
- 微信公众平台服务框架
- python求一元三次方程的根_关于二次、三次、四次方程求解方法讨论
- session和cookies
- latex转为html效果好吗,latex转HTML
- 一键自动下载百度美女图片
- 市场的各大TWS蓝牙耳机芯片方案汇总
- 利用QQ邮箱设置个性域名邮箱,并在网易邮箱大师客户端添加域名邮箱
- 压缩文件压缩率是什么意思
- 程序员必备注释模板——“佛祖保佑 永无bug“
- ps图文教程:ps钢笔工具在哪里
- 干货全拿走-用Excel制作小市值轮动价值投资选股器
- wxpyhton打包后图标背景变黑
- kafka消息服务的producer、broker、consumer的配置
热门文章
- 上传gitlab ! [remote rejected] dev - dev (pre-receive hook declined)
- JVAV SE冒泡排序
- 缺失值处理(Imputation)
- 传热学相关的无量纲数的物理意义
- Typecho情侣博客Brave主题源码
- Spring Cloud 基本理论概述
- 如何让自己发了疯、拼了命、石乐志的学习?
- Android绘制优化(二)布局优化
- Oracle无法标识锁定数据文件,启动错误ORA-01157: 无法标识/锁定数据文件 解决方案...
- 巴比特 | 元宇宙每日必读:蒂芙尼宣布推出限量版 CryptoPunk 定制吊坠