1

"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"

4

2 回答 2

3

你应该使用snprintf. 如果fieldVal正好是 30 或更大,那么它会破坏你的记忆。

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

于 2013-06-06T07:04:53.983 回答
1

我可以在您的代码中看到的唯一可能隐藏此类错误fieldVal的内容是溢出您分配的缓冲区。

您可以检查返回值sprintf以查看它正在写入多少个字符。

您是否尝试过类似valgrind的东西?

于 2013-06-06T07:05:05.373 回答