对c大神又有事相求,realloc问题

lcniuren33 发布于 2012/12/19 10:23
阅读 1K+
收藏 0
一段写入栈操作函数的代码:
typedef struct strStack
{
int length;
int size;
char *str;
} STR_STACK;
/*
函数功能:入栈
函数参数:栈地址pStack,入栈字符ch
函数返回值:成功返回true,失败返回false
*/
bool Push(STR_STACK *pStack, char ch){
if (!pStack || !pStack->str)
return false;
if(pStack->length >= pStack->size)
{
pStack->str = (char *)realloc(pStack->str, sizeof(char) * (pStack->size + STACK_INCREACE_SIZE));/////////////////////////////////////////////////////
if (!pStack->str)
return false;
pStack->size = pStack->size + STACK_INCREACE_SIZE;
}
*(pStack->str + pStack->length) = ch;
*(pStack->str + pStack->length + 1) = '\0';
pStack->length = pStack->length + 1;
return true;
}
则段代码产生错误的结果。
然后我就跟踪
但是跟踪到语句:
pStack->str = (char *)realloc(pStack->str, sizeof(char) * (pStack->size + STACK_INCREACE_SIZE));的时候,就突然断了(我用的Codeblocks),然后提示是:
Program received signal SIGTRAP, Trace/breakpoint trap.
In ntdll!TpWaitForAlpcCompletion () (C:\Windows\system32\ntdll.dll)

求问大神为什么?
加载中
0
四彩

不是 realloc 的问题。

当 pStack->length 刚好比 pStack->size 小1的时候,
    *(pStack->str + pStack->length) = ch;

    *(pStack->str + pStack->length + 1) = '\0';

指针溢出了


ps:你的C语言功底太一般,急待提高。

lcniuren33
lcniuren33
谢谢,很有道理~
0
LoveCupid
LoveCupid

建议LZ好好看看这个,http://baike.baidu.com/view/736230.htm

我昨天也遇到这个问题,这问题大部分都是你内存读写问题,可能是你需要realloc的地址不容许你操作,所以报段错误。换malloc试试。。。

返回顶部
顶部