关于指针的奇怪有关问题
关于指针的奇怪问题。
一段类似于下面的代码:
Func1()
{
PBYTE pNewBuffer=NULL;
Func2(pNewBuffer);
pNewBuffer[1]=3;//发现这里不能访问pNewBuffer。这是为什么呢?我在Func2中已经new了。
}
Func2(PBYTE pNewBuffer)
{
pNewBuffer=new BYTE[300];
}
------解决方案--------------------
函数调用后pNewBuffer的地址因为退栈,又改回NULL了
------解决方案--------------------
老问题了,Func2函数的参数指针的引用或者指针的指针。
比如修改成Func2(PBYTE& pNewBuffer)
------解决方案--------------------
要不用指针的指针,要不用指针引用。
这个跟传入一个int想返回是一样的,如下代码也是无效的。
i也不会返回2的。
------解决方案--------------------
Func2()中new []的返回值只是修改了pNewBuffer的副本。可以这样改:
------解决方案--------------------
很简单的问题,卤煮源码中的两个pNewBuffer是不一样的,尽管看起来没什么不同。Func2(PBYTE& pNewBuffer)是最可靠的处理方法。
------解决方案--------------------
一段类似于下面的代码:
Func1()
{
PBYTE pNewBuffer=NULL;
Func2(pNewBuffer);
pNewBuffer[1]=3;//发现这里不能访问pNewBuffer。这是为什么呢?我在Func2中已经new了。
}
Func2(PBYTE pNewBuffer)
{
pNewBuffer=new BYTE[300];
}
------解决方案--------------------
函数调用后pNewBuffer的地址因为退栈,又改回NULL了
------解决方案--------------------
老问题了,Func2函数的参数指针的引用或者指针的指针。
比如修改成Func2(PBYTE& pNewBuffer)
------解决方案--------------------
要不用指针的指针,要不用指针引用。
这个跟传入一个int想返回是一样的,如下代码也是无效的。
void getint(int i)
{
i = 2;
}
i也不会返回2的。
------解决方案--------------------
Func2()中new []的返回值只是修改了pNewBuffer的副本。可以这样改:
Func1()
{
PBYTE pNewBuffer = NULL;
Func2(&pNewBuffer);
pNewBuffer[1] = 3;
}
Func2(PBYTE *pNewBuffer)
{
*pNewBuffer = new BYTE[300];
}
------解决方案--------------------
很简单的问题,卤煮源码中的两个pNewBuffer是不一样的,尽管看起来没什么不同。Func2(PBYTE& pNewBuffer)是最可靠的处理方法。
------解决方案--------------------
//2种方案:
//1:
void Func2(PBYTE& pNewBuffer)
{
pNewBuffer=new BYTE[300];
}
//调用Func2(pNewBuffer);
//2:
void Func2(PBYTE* pNewBuffer)
{
*pNewBuffer=new BYTE[300];
}
//调用 Func2(&pNewBuffer);