程序在数组索引分配时崩溃

时间:2012-01-31 20:34:41

标签: c++ arrays pointers indexing stack

我在这里遇到一些问题。 每次我运行下面的代码时,我的程序都会崩溃。

void Wingcod::push(byte b)
{
    stack[stackp] = b;
    stackp++;
    if(stackp >= stacks)
    {
        stacks += 16;
        try
        {
            realloc(stack,stacks);
        }catch(bad_alloc*)
        {
            cerr << "STACK OVERFLOW";
            exit(1);
        }
    }
}

堆栈,堆栈和堆栈的定义如下:

stacks = 8;
stackp = 0;
stack = new byte[stacks];

字节只是unsigned char

4 个答案:

答案 0 :(得分:6)

您不能在使用realloc()分配的指针上使用new

也许尝试使用以下内容代替realloc()

        byte* tmp = new byte[stacks];
        delete [] stack;
        stack = tmp;

答案 1 :(得分:4)

realloc不会抛出异常,因为它与new无关,而与C malloc无关。它也没有设置指针。

stacks = 8;
stackp = 0;
stack = static_cast<byte*>(malloc(stacks * sizeof(byte)));

void Wingcod::push(byte b)
{
    stack[stackp] = b;
    stackp++;
    if(stackp >= stacks)
    {
        stacks += 16;
        if(!(stack = static_cast<byte*>(realloc(stack,stacks * sizeof(byte))))) {
            cerr << "STACK OVERFLOW";
            exit(1);
        }
    }
}

答案 2 :(得分:4)

您不能将使用new T[n]分配的指针用作realloc()的参数。使用realloc()的指针必须来自malloc()函数族(malloc()calloc()realloc())。就个人而言,我不会使用任何此类内容,而是使用std::vector<T>

答案 3 :(得分:0)

here开始,Realloc仅适用于指向以前由alloc分配的内存的指针。尝试使用malloc