返回信息流#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//using namespace std;
void acc(char *p){
p=(char *)malloc(100);
}
int main(){
char *str=NULL;
acc(str);
strcpy(str,"HelloWorld");
printf("%s",str);
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #74670同步于 2013/10/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
百度面试题【找错】
soberchallen
2013/10/20镜像同步17 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 soberchallen 的大作中提到: 】
: #include <stdio.h>
: #include <stdlib.h>
: #include <string.h>
: ...................
是不是得传指针的指针?
陈题了,函数传参进去的是str的拷贝,因此函数内申请的内存是拷贝指针的,函数结束后该指针的生命周期就结束了。
str就一直是NULL,从没有改变过,并且acc执行一次内存就泄漏一次。
指针传参实质还是值传递,调用函数时仍旧会先产生一个指针副本,然后将传参指针的值(即指向的地址)赋值给这个指针副本。这与所谓的“值传递”别无两样。不少教科书强调地址传递和值传递的区别根本就是误导。
acc参数应该用二级指针吧。。。。
【 在 soberchallen 的大作中提到: 】
: #include <stdio.h>
: #include <stdlib.h>
: #include <string.h>
: ...................
好久不看代码了。。。但是发现我还会。。
【 在 soberchallen (daydayup) 的大作中提到: 】
: #include <stdio.h>
: #include <stdlib.h>
: #include <string.h>
: ...................
【 在 kuhu 的大作中提到: 】
: 陈题了,函数传参进去的是str的拷贝,因此函数内申请的内存是拷贝指针的,函数结束后该指针的生命周期就结束了。
: str就一直是NULL,从没有改变过,并且acc执行一次内存就泄漏一次。
: 指针传参实质还是值传递,调用函数时仍旧会先产生一个指针副本,然后将传参指针的值(即指向的地址)赋值给这个指针副本。这与所谓的“值传递”别无两样。不少教科书强调地址传递和值传递的区别根本就是误导。
但是感觉传递指针就是不一样啊,像 int *p=&a; add(*p){*p=*p+2;}确实能把a的值改变啊,这里应该怎么改?