Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 数组索引分配程序崩溃_C++_Arrays_Pointers_Indexing_Stack - Fatal编程技术网

C++ 数组索引分配程序崩溃

C++ 数组索引分配程序崩溃,c++,arrays,pointers,indexing,stack,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*) {

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

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);
        }
    }
}

字节只是一个
无符号字符

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

也许可以尝试以下方法,而不是
realloc()


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);
        }
    }
}
stacks=8;
stackp=0;
stack=static_cast(malloc(stacks*sizeof(byte));
void Wingcod::push(字节b)
{
stack[stackp]=b;
stackp++;
如果(堆栈P>=堆栈)
{
堆栈+=16;
if(!(stack=static_cast(realloc(stack,stacks*sizeof(byteЮ)')){

cerr您不能使用分配有
new T[n]
的指针作为
realloc()
的参数。使用
realloc()
的指针必须来自
malloc()
函数系列(
malloc()
calloc()
,或
realloc()
)我不想使用任何这一点,而是使用<代码> STD::vector /< p> < p> >,ReLoCc只对以前分配给内存的指针进行操作。尝试使用MalOC

你声明STACP是什么类型?你是否尝试用断点进行调试,看看会发生什么?为什么不使用C++?你可以有一个方便的<代码> STD::矢量< /CODe> 这正是您所需要的。当我进入push函数时,调试器中的所有变量字段都变为空白。奇怪。@Kerrek SB这听起来可能有点奇怪,但我需要比向量更低级的东西。“不要更改指针”似乎是崩溃的一个重要部分。是的,这是一个解决方案,但不是针对我当前的问题。您可以看到崩溃发生在函数的第一行,即我第一次运行它时。@TheBreadCat如果您认为问题是其他问题,您可以发布另一个问题和更多代码。我认为调用对象(这个指针)可能无效。wc->push()代码与此相同。push(),它只是一个静态引用。@TheBreadCat为什么
wc
是指针?您100%确定它不是空的吗?
        byte* tmp = new byte[stacks];
        delete [] stack;
        stack = tmp;
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);
        }
    }
}