首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组索引赋值时程序崩溃

数组索引赋值时程序崩溃
EN

Stack Overflow用户
提问于 2012-02-01 04:34:41
回答 4查看 212关注 0票数 0

我这里有点小问题。每次我运行下面的代码,我的程序就会崩溃。

代码语言:javascript
运行
复制
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);
        }
    }
}

stack、stackp和stacks的定义如下:

代码语言:javascript
运行
复制
stacks = 8;
stackp = 0;
stack = new byte[stacks];

而byte只是一个unsigned char

EN

回答 4

Stack Overflow用户

发布于 2012-02-01 04:37:32

不允许在使用new分配的指针上使用realloc()

也许可以试试下面这样的代码,而不是realloc()

代码语言:javascript
运行
复制
        byte* tmp = new byte[stacks];
        delete [] stack;
        stack = tmp;
票数 6
EN

Stack Overflow用户

发布于 2012-02-01 04:37:36

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

代码语言:javascript
运行
复制
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);
        }
    }
}
票数 4
EN

Stack Overflow用户

发布于 2012-02-01 04:38:41

不能将使用new T[n]分配的指针用作realloc()的参数。使用realloc()的指针必须来自malloc()系列函数(malloc()calloc()realloc())。就我个人而言,我不会使用这些,而是使用std::vector<T>

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9086548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档