我在函数返回时随机得到"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"
。
答案 0 :(得分:3)
您应该使用snprintf
。如果fieldVal
正好是30或更大,那么它可能会破坏你的记忆。
另一件事是resFieldsCnt
设置为0.这是正确的吗?因为之后你没有改变这个值,所以为什么要把它传入?
答案 1 :(得分:1)