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