c/c++指针的引用

int *p;
void fun(int *pCopy);

在函数fun调用过程,pCopy是p的副本,退出函数时会销毁pCopy,但是p和pCopy指向同一内存地址,因此在函数内操作pCopy会改变p指向的数据的值。

但是在使用malloc,realloc函数时遇到一问题。

int *p = (int*) malloc (5*sizeof(int));
cout<<"p : "<<_msize(p)/sizeof(int)<<endl;
addLength(p);
cout<<"p : "<<_msize(p)/sizeof(int)<<endl; //程序在这中断
void addLength(int *pCopy)
{
	int Length = _msize(pCopy)/sizeof(int);
	pCopy = (int*) realloc (pCopy,(Length + 1)*sizeof(int));
}
在函数里想要动态的增加p指向的空间大小。一般理解,操作pCopy等同于操作p。但是调用_msize函数未成功。
查看msdn,The _msize function returns the size, in bytes, of the memory block allocated by a call tocalloc, malloc, or realloc。
_msize函数对指针有要求,指针不能变,除了使用calloc,malloc,realloc操作的指针。
现在代码的情况是,在函数里改变了p指向的内存空间,但是指针p本身没有发生改变,_msize函数无法使用。
解决的方法是使用指针的引用。

int *p = (int*) malloc (5*sizeof(int));
cout<<"p : "<<_msize(p)/sizeof(int)<<endl;
addLength(p);
cout<<"p : "<<_msize(p)/sizeof(int)<<endl; 
void addLength(int *&pCopy)
{
	int Length = _msize(pCopy)/sizeof(int);
	pCopy = (int*) realloc (pCopy,(Length + 1)*sizeof(int));
}
这样pCopy就变成p的引用了,操作引用pCopy相当于操作p,这样通过了。
遗留Bug,上面代码若是

int *p = (int*) malloc (5*sizeof(int));
//cout<<"p : "<<_msize(p)/sizeof(int)<<endl;
addLength(p);
cout<<"p : "<<_msize(p)/sizeof(int)<<endl; 
void addLength(int *pCopy)
{
	int Length = _msize(pCopy)/sizeof(int);
	pCopy = (int*) realloc (pCopy,(Length + 1)*sizeof(int));
}
则通过……………………
很奇怪,估计还是跟_msize函数有关,求指导。追踪变量发现:
如果多一句输出语句则在Add之后p指向的数据变了,如果没有那一句输出语句则Add之后p指向没变。无法理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值