标签归档:new

RSS feed of new

最后更新于 .

C/C++代码中,野指针问题历来已久,当然,大家都知道new/delete要成对出现:

A *p = new A();
delete p;
p = NULL;

然而现实中却并不是总是如此简单,考虑如下例子:

class A
{
public:
    C() {}
    virtual ~C() {}
};
class B
{
public:
    B() {
        m_pA = NULL;
    }
    virtual ~B() {}

    void SetA(A* p)
    {
        m_pA = p;
    }

private:
    A* m_pA;
};

A* pA = new A();
B* pB = new B();
pB->SetA(pA);

delete pA;
pA = NULL;
//此时B中的m_pA已经无效 ...

最后更新于 .

今天组内调来了一个架构组的大牛,结果一来就给我的代码找出了一个问题。唉,还是学艺不精啊。
问题如下:通常我们在使用C++的new的时候,都是这样用的:


char *temp = NULL;
temp = new char[1000];
if(temp == NULL)
{
return false;
}

初看起来似乎没有问题,我们来做个测试,测试代码如下:


int main(int argc,char* argv[])
{
char *test=NULL;
while(1)
{
test = NULL;
test = new char[1000000];
if(test == NULL)
{
printf("I am wrong\n");
break;
}
}
printf("I am ok!\n");
return ...