对指针形参分配空间

GetMemory(char *p){
    p = (char*)malloc(100);
}void Test(void){  char *str = NULL;  GetMemory(str);  strcpy(str, "hello world");  printf(str);}

这段代码有错,str指针始终为空,因为GetMemory改变的是参数的值,而非指针指向的空间里的值,而改变形参的值并不会传回。

修改方法:

//方法一:函数返回
char* GetMemory(){
    char* p = (char*)molloc(100);
    return p;
}

//方法二:二级指针
void GetMemory(char **P){
    *p = (char*)molloc(sizeof(char)*100);
}
时间: 2024-10-07 04:17:39

对指针形参分配空间的相关文章

引用,引用形参,指针形参与指向指针的引用形参,内存泄露及free相关

由做UVa133引发的一系列问题及讨论 1.引用类型    C++ Primer P51 引用就是对象的另一个名字,使用多个变量名指向同一地址.实际程序中,引用主要用作函数形参. 复合类型.不能定义引用类型的引用,但可以定义任何其他类型的引用. 格式: 类型名&  标示符=已声明的常变量; 2.引用形参    C++ Primer P201-205 非引用形参有普通的.指针形参.const形参(可传const对象或非const对象) 引用形参,3种情形:@修改实参,或返回多个值  @避免复制大型

关于指针形参的一点体会

关于指针形参的一点体会: 现在假设指针实参为地址&a(0001)在这个&a(0001)地址空间内所存储的是一个int类型的变量为0: 那么在被调用函数中,会临时开辟一个空间一片临时地址空间&b(0002),在&b的所指向的地址空间内,其所存储的内容为一个地址值,这个地址值,就是&a(0001).所以现在在被调函数中,有两种变化的操作:1. 对&b(0002)所指向的地址内存储的内容,进行改变,比如讲将&b(0002)所指向空间内的值就是(0001)改

如何限制一个类对象只在栈(堆)上分配空间?

最近做了一道题:在C++中,为了让某个类只能通过new来创建(即如果直接创建对象,编译器将报错) 其实该问题等同于如何限制一个类对象只在栈(堆)上分配空间? 一般情况下,编写一个类,是可以在栈或者堆分配空间.但有些时候,你想编写一个只能在栈或者只能在堆上面分配空间的类.这能不能实现呢?仔细想想,其实也是可以滴. 在C++中,类的对象建立分为两种,一种是静态建立,如A a:另一种是动态建立,如A* ptr=new A:这两种方式是有区别的. 1.静态建立类对象:是由编译器为对象在栈空间中分配内存,

如何让对象只在堆或者栈中分配空间

在开始之前先来分析一下C++中的new运算符和operator new之间的关联. new:指我们在C++里通常用到的运算符,比如A* a = new A或者调用带参数的构造函数;  对于new来说,有new和::new之分,前者位于std. operator new():指对new运算符的重载形式,它是一个函数,并不是运算符.对于operator new来说,分为全局重载和类重载,全局重载是void* ::operator new(size_t size),在类中重载形式 void* A::o

C语言malloc函数为一维,二维,三维数组分配空间

c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请所取空间的大小,因为没有在声明部分定义它们为变量或数组,所以不能通过变量名或数组的方式去引用这些数据,只能通过指针来引用. 对内存的动态分配是通过系统提供的库函数来实现的,主要有malloc,calloc,free,realloc这四个函数. 接下来写一下malloc函数如何实现为一维,二维,三维数

无法为数据库中的对象分配空间,因为'PRIMARY'文件组已满

用SQL Server2012,做数据保存时出错,错误信息:无法为数据库'***'中的对象'***'分配空间,因为'PRIMARY'文件组已满.请删除不需要的文件.删除文件组中的对象.将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间. 解决办法:打开SQL Server Management Studio,右键报错的数据库,选择"属性",弹出对话框,选择"文件"页签,查看是否限制了数据库文件增长,若没有做限制,再查看磁盘剩余空间是否足够

通过段调优顾问回收大表的分配空间和高水位线

--通过段调优顾问回收大表的分配空间和高水位线 --创建用户 SQL> create tablespace hzqtbs datafile '/u01/app/oracle/oradata/prod/hzqtbs.dbf' size 30m; Tablespace created. SQL> create user hzq identified by hzq default tablespace hzqtbs quota unlimited on hzqtbs account unlock;

[SQL_Server_Question]Msg 1105无法为数据库 'tempdb' 中的对象分配空间,因为 'PRIMARY' 文件组已满

错误消息: Msg 1105, Level 17, State 2, Line 266Could not allocate space for object 'dbo.Large Object Storage System object: 422392492982272' in database 'tempdb' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropp

函数指针形参

编写函数的声明,令其接受两个int形参并且返回类型也是int:然后声明一个vector对象,令其元素是指向该函数的指针.编写4个函数,分别对两个int值执行加.减.乘除运算. #include<iostream> #include<string> #include<vector> using namespace std; int plus1(int x,int y) { return x+y; } int sub(int x ,int y) { return x-y;