user-0 提问: 求助两个程序题

回复:
user: user-1
content: char *p; null也去掉

user: user-1
content: getmemory删掉也是可以的

user: user-2
content: 引用 13 楼 oQianQu 的回复:[quote=引用 4 楼 xhsemaill 的回复:] #include <cstdio> #include<cstdlib> #include<cstring> void GetMemory(char* &p) { 	p = (char *)malloc(100); } int main() { 	char *str = NULL; 	GetMemory(str); 	strcpy(str, "hello world"); 	printf(str); 	return 0; }  用到了C++中的引用 谢谢你的回答！代码放在c++下是可以运行的，但是c语言不行，因为头文件不对，可是我不知道应该添加哪些头文件呢？12楼有类似的解决方案，但是也不完善。你看看还有什么办法？谢谢你~[/quote]  c语言貌似没有引用这个概念

user: user-0
content: 引用 4 楼 xhsemaill 的回复:#include <cstdio> #include<cstdlib> #include<cstring> void GetMemory(char* &p) { 	p = (char *)malloc(100); } int main() { 	char *str = NULL; 	GetMemory(str); 	strcpy(str, "hello world"); 	printf(str); 	return 0; }  用到了C++中的引用 谢谢你的回答！代码放在c++下是可以运行的，但是c语言不行，因为头文件不对，可是我不知道应该添加哪些头文件呢？12楼有类似的解决方案，但是也不完善。你看看还有什么办法？谢谢你~

user: user-0
content: 引用 1 楼 cstdingjw 的回复:Q1: 当b<=0时, 返回值不确定;  Q2: 代码如下: #include <stdio.h> #include <stdlib.h> void GetMemory(char* &p){ p = (char *)malloc(100); } void main(){ char *str = NULL; GetMemory(str); strcpy(str, "hello world"); free(str); printf(str); } 谢谢你的回答，我以为代码这样写也是可以的，但是就是报错了，见截图。你看还有没有什么建议？

user: user-0
content: 引用 5 楼 Evankaka 的回复:第二个应该这个写才是，用指向指针的指针 #include <stdio.h> void GetMemory(char **p){ *p = (char *)malloc(100); } void main(){ char *str = NULL; GetMemory(&str); strcpy(str, "hello world"); printf(str); free(str)///记得加！ }  void GetMemory(char *p) ///虽说能改变p指针指向的内容，即*p,但它实际上还是按值传递，只不过传递的是地址，相当于生成了地址p的一个复本_p,,然后*_p就能相应的改变*p的内容，因为它们的地址是一样的，但是我们在按值传递中学过，形参变，不会改变实参，要注意，这里的形参指的是地址，也就是说，你改变了_p指针的地址，_p申请了新的内存,但是p是实参，它没变化。所以你每调用这个函数一次，它就发生一次内存泄露。用指向指针的指针，这时就可以了。。。 谢谢你的回答，你的方案是可行的，但是我比较想要一个用引用传递的方式解决问题的方案，你看能不能再给点建议？

user: user-3
content: Q1:  如果b不满足条件c,就不会初始化.  Q2:纠错下代码先  #include <stdio.h>  void GetMemory(char *p) { 	p = (char *)malloc(100); } void main() { 	char *str = NULL; 	GetMemory(str); 	strcpy(str, "hello world"); 	printf("%s\n",str); }  然后p申请的堆内存,随着其被回收,应该也被系统回收了,所以str根就没申请到堆内存.

user: user-4
content: Q1: 当b<=0时, 返回值不确定;  Q2: 代码如下: #include <stdio.h> #include <stdlib.h> void GetMemory(char* &p){ p = (char *)malloc(100); } void main(){ char *str = NULL; GetMemory(str); strcpy(str, "hello world"); free(str); printf(str); }

user: user-5
content: 引用 9 楼 gojoy_x13 的回复:c是函数f中的局部变量，运行时f中的局部变量保持在临时栈中，所以return c 是不规范的吧~~ +1 Q1：当这个函数调用结束后，局部对象的生命期随函数的结束而结束。 建议多了解一下函数、生命期

user: user-6
content: c是函数f中的局部变量，运行时f中的局部变量保持在临时栈中，所以return c 是不规范的吧~~

user: user-7
content: 引用 2 楼 q3733353520 的回复:Q1:  如果b不满足条件c,就不会初始化.  Q2:纠错下代码先  #include <stdio.h>  void GetMemory(char *p) { 	p = (char *)malloc(100); } void main() { 	char *str = NULL; 	GetMemory(str); 	strcpy(str, "hello world"); 	printf("%s\n",str); }    然后p申请的堆内存,随着其被回收,应该也被系统回收了,所以str根就没申请到堆内存.  呵呵，其它的不说，p被收回不收回和堆内存被收回有什么关系？堆内存不主动free都不会被收回。少年，你要多看看书了。

user: user-8
content: 看楼主的代码和问题，感觉楼主需要先看书等资料，看不明白，想不明白了可以再来问 printf(str);？

user: user-9
content: 基础问题，看看指针，以及函数参数

user: user-10
content: 第二个应该这个写才是，用指向指针的指针 #include <stdio.h> void GetMemory(char **p){ *p = (char *)malloc(100); } void main(){ char *str = NULL; GetMemory(&str); strcpy(str, "hello world"); printf(str); free(str)///记得加！ }  void GetMemory(char *p) ///虽说能改变p指针指向的内容，即*p,但它实际上还是按值传递，只不过传递的是地址，相当于生成了地址p的一个复本_p,,然后*_p就能相应的改变*p的内容，因为它们的地址是一样的，但是我们在按值传递中学过，形参变，不会改变实参，要注意，这里的形参指的是地址，也就是说，你改变了_p指针的地址，_p申请了新的内存,但是p是实参，它没变化。所以你每调用这个函数一次，它就发生一次内存泄露。用指向指针的指针，这时就可以了。。。

user: user-11
content: #include <cstdio> #include<cstdlib> #include<cstring> void GetMemory(char* &p) { 	p = (char *)malloc(100); } int main() { 	char *str = NULL; 	GetMemory(str); 	strcpy(str, "hello world"); 	printf(str); 	return 0; }  用到了C++中的引用

user: user-12
content: c初始值未定