C语言malloc指针传参错题总结

C语言malloc指针传参错题总结
一、错误版一级指针传参核心bug错误点1. 函数传参是值拷贝修改形参p不影响外部str2. str一直为NULLstrcpy空指针崩溃3. malloc地址丢失产生内存泄漏方案1二级指针 char**原理1. 传入指针变量地址 str2. *p 直接操作外部str完成赋值方案2函数返回指针替代二级指针原理1. 函数内部存malloc地址return传回外部2. 外部变量接收返回值无需二级指针3. 原函数参数无作用可删除通用必守规范三套代码共同坑点1. 缺头文件stdio.h/string.h/stdlib.h2. 不校验malloc返回NULL易崩溃3. printf(str)不安全标准写法printf(%s,str)4. malloc不配对free → 内存泄漏5. free后指针不置空 → 野指针隐患核心区分短句改指针指向的数据一级指针改指针自身存储的地址二级指针 / 函数返回指针二、函数返回数组地址栈/静态/堆对比1. 普通局部数组栈区产生野指针函数结束栈内存销毁返回失效地址2. static修饰局部数组静态区安全static变量存全局静态区函数结束内存不销毁3. malloc堆内存堆区安全需手动释放堆内存不受函数生命周期限制用完必须free三、野指针知识点对应代码定义指针存储无效、不受系统管控的内存地址访问会乱码、程序崩溃野指针三种产生场景1. 未初始化指针2. 返回普通栈局部变量地址上方已附代码3. free后指针未置空空指针 vs 野指针- 空指针 p NULL 固定指向地址0操作系统有保护不会崩溃- 野指针随机无效内存地址无保护极易程序崩溃规避野指针三规则1. 指针定义时立即初始化 NULL /有效地址2. 禁止返回普通栈局部数组的地址3. free 释放内存后立刻将指针赋值为 NULL