面临函数返回'Stack Corruption'问题
Facing issue of 'Stack Corruption' on function return
我得到错误作为"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
的返回值,看看它写了多少个字符。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- 我在C++中使用删除运算符时遇到问题。我在运行时不断收到"double free or corruption (fasttop)"错误
- 面临函数返回'Stack Corruption'问题