小编Jon*_*nas的帖子

从析构函数中调用delete会导致堆栈溢出吗?

下面的代码创建一个双指针B**B*.它将使用该指针为另一个指针分配内存,该指针将指向被调用B时创建的实例start():

class A:

class A
{
public:
    A()
    {
        fb = new B*;
        *fb = NULL;
    }

    ~A()
    {
        if(*fb)
            delete *fb;

        delete fb;
    }

    B** getfb()
    {
        return fb;
    }

private:
    B** fb;
};
Run Code Online (Sandbox Code Playgroud)

class B:

class B
{
public:
    B()
    {
        B** fb = a->getfb();

        *fb = this;
    }

    ~B()
    {
        B** fb = a->getfb();

        delete *fb;            // <--- stack overflow

        *fb = NULL;
    }

private:
    A* a; …
Run Code Online (Sandbox Code Playgroud)

c++ stack-overflow destructor memory-management

1
推荐指数
2
解决办法
1179
查看次数

new,()和[]运算符都在一条指令处

为什么我不能new像这样使用运算符:

char* p;

p = new char('a')[3];

delete[] p;
Run Code Online (Sandbox Code Playgroud)

编译说:

error C2143: syntax error : missing ';' before '['
error C3409: empty attribute block is not allowed
error C2143: syntax error : missing ']' before 'constant'
Run Code Online (Sandbox Code Playgroud)

c++ new-operator

1
推荐指数
2
解决办法
519
查看次数

无符号长长的算术

我想将两个相乘,unsigned integers但我希望结果存在于一个unsigned long long变量中

unsigned long long M;
unsigned int X;
unsigned int Y;

X = 999999;
Y = 9990;
M = X * Y;
Run Code Online (Sandbox Code Playgroud)

M应该9989990010但由于某种原因它一直存在1400055418

我已经困扰了一个星期了,我想我已经到了想哭的地步!

c++ unsigned visual-c++ long-integer

0
推荐指数
1
解决办法
1950
查看次数

如何对具有非标准二进制表示的数字进行算术运算?

使用unsigned char,您可以存储0到255之间的数字

255(b10)= 11111111(b2)<=那是1个字节

这样可以轻松地执行+, - ,*等操作...

现在怎么样:

255(b10)= 10101101(b2)

使用此方法可以使用unsigned char 表示最多399个

399(b10)= 11111111(b2)

有人可以提出一种算法来使用最后一种方法进行加法吗?

c++ range unsigned-char

-4
推荐指数
1
解决办法
178
查看次数