函数不能传递动态内存

https://blog.csdn.net/zjwson/article/details/64123320

1、问题:主要是避免在函数体中为传入的指针直接申请内存,因为传入的实参会发生复制,而函数体是对复制的形参进行操作,并没有直接对实参进行操作;

解决方案:

1)传入char** p指针,然后对*p进行操作;或者char* p,对*p=x;明白一点,复制的形参和实参指针都指向同一个地址;

2)

原文地址:https://www.cnblogs.com/wllwqdeai/p/10726917.html

时间: 2024-11-18 10:50:10

函数不能传递动态内存的相关文章

传递动态内存

一.内存分配分类 1.从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static 变量. 2.在栈上创建.在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放. 3.从堆上分配,亦称动态内存分配.程序在运行的时候用malloc 或new 申请任意多少的内存,程序员自己负责在何时用free 或delete 释放内存.动态内存的生存期由程序员决定,使用非常灵活,但问题也最多. 二.传递动态内存 1.动态

getMemory()-传递动态内存

void getMemory(char *p) { p=(char *)malloc(100); } char * getMemory(char *p) { char ch[]="hello world"; return ch; } char * getMemory(char **p) { *p=(char*)malloc(100); return *p; } int main() { char *str=NULL; // getMemory(str); getMemory(&

C复习---动态内存分配

原型extern void *malloc(unsigned int num_bytes);头文件#include <stdlib.h>#include <malloc.h>函数声明void *malloc(size_t size);备注:void* 表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比 如是char还是int或者其他数据类型).所以在使用时一般要做一下强制类型转换.功能分配长度为nu

C语言动态内存的申请和释放

什么是动态内存的申请和释放? 当程序运行到需要一个动态分配的变量时,必须向系统申请取得堆中的一块所需大小的存储空间,用于存储该变量.当不再使用该变量时,也就是它的生命结束时,要显式释放它所占用的存储空间,这样系统就能对该堆空间进行再次分配,做到重复使用有限的资源. 下面将介绍动态内存申请和释放的函数 1.malloc函数 在C语言中,使用malloc函数来申请内存.函数原型如下: #include<stdlib.h> void *malloc(size_t size); 参数size代表需要动

C语言中的动态内存分配,malloc/free

malloc函数 原型 extern void *malloc(unsigned int num_bytes); 头文件 #include <stdlib.h> 功能 分配长度为num_bytes字节的内存块 返回值 如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL.当内存不再使用时,应使用free()函数将内存块释放.函数返回的指针一定要适当对齐,使其可以用于任何数据对象. 说明 关于该函数的原型,在以前malloc返回的是char型指针,新的ANS

4、动态内存分配(*****)

一.传统数组的缺点(*****) 1).数组长度必须事先制定,且只能是常整数,不能是变量 例子: int a[5]://oK int len=5:int a[len]://error 2).传统形式定义的数组,该数组的内存程序员无法手动释放,在一个函数运行期间,系统为该函数中数组所分配的空间会一直存在,直到该函数运行完毕时,数组的空间才会被系统释放 3).数组的长度一旦定义,其长度就不能在更改数组的长度不能在函数运行的过程中动态的扩充或缩小 4).A函数定义的数组,在A函数运行期间可以被其它函数

动态内存可以跨函数使用示例与静态变量不能跨函数使用

动态内存可以跨函数使用示例 # include <stdio.h> # include <malloc.h> void f(int ** q) { *q = (int *)malloc(sizeof(int)); //sizeof(数据类型) 返回值是该数据类型所占的字节数 //等价于 p = (int *)malloc(sizeof(int)); //q = 5; //error //*q = 5; //p = 5; **q = 5; //*p = 5; } int main(v

内存的分配方式有几种? 动态内存的的传递注意事项!

1.内存的分配方式分为   静态存储区.栈.堆. 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,比如   全局变量. 栈:在栈上创建,在函数(main函数或其他子函数)执行期间,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动释放.所以我们不能返回在函数内部定义的变量(函数内定义的指针可以返回),因为他们在函数执行结束时已经被销毁了.处理器的指令集中有关于栈内的分配运算,因此效率很高,但是分配的内存资源有限. 堆:从堆上分配,亦称为动态

动态内存分配函数与释放函数

(1)分配函数 void *malloc(sizeof(unsigned size) 功能:在内存的动态存储区中分配一块长度位size的连续空间. 返回值:指针,存放被分配内存的起始地址.若未申请到空间,则返回NULL(0). void *:指向任何类型的数据,在使用时,要进行强制类型转换. 例如:int *malloc(sizeof(int)) struct student *malloc(sizeof(struct student)) (2)释放函数 void free(void *ptr)