面临函数返回'Stack Corruption'问题

Facing issue of 'Stack Corruption' on function return

本文关键字:Corruption 问题 Stack 函数 返回      更新时间:2023-10-16

我得到错误作为"stack corruption detected : aborted"随机函数返回。我的代码如下:

struct SND_RCV_CMD_t
{
    int    nRspFieldsCnt;
    char** rspValues;
}
void SendAndReceive(SND_RCV_CMD_t *cmdParams)
{
    cmdParams->rspValues = SendAndReceiveEx(&cmdParams->nRspFieldsCnt);
}
char** SendAndReceiveEx(int* resFieldsCnt)
{
    char** retFields = 0;
    *resFieldsCnt = 0;
    int maxStrings = 500;
    retFields = (char**)malloc(maxStrings * sizeof(char*));
    for(int id = 0; id < maxStrings; id++)
    {
        retFields[id] = (char*)malloc(30 * sizeof(char));
        memset(retFields[id], 0x00, 30);
        sprintf(retFields[id], "%s", fieldVal);
    }
    return retFields;  //At this point I got stack corruption error
}

当我调用SendAndReceive方法时,我的代码在SendAndReceiveEx方法结束时崩溃。错误显示为"Stack corruption detected : aborted"

您应该使用snprintf。如果fieldVal恰好是30或更大,那么它可能会破坏您的内存。

另一件事是resFieldsCnt被设置为0。这是正确的吗?因为你之后不改变值,为什么要传入呢?

我在代码中看到的唯一可能隐藏这种错误的是,如果fieldVal溢出了您分配的缓冲区。

你可以检查sprintf的返回值,看看它写了多少个字符。

你试过valgrind之类的东西吗?