当前位置: 技术问答>linux和unix
AIX下调用函数时提示段错误
来源: 互联网 发布时间:2016-03-15
本文导语: CFepFisSettingMsg cmdMsg; memcpy( &cmdMsg.m_Data, pPara, sizeof(SFisCmdItem)); cmdMsg.m_iDataNum = iNum; cmdMsg.m_iDataLen = iNum*sizeof(SFepFisSetting); cmdMsg.m_bEnd = bEnd; cmdMsg.m_iSeq = iSeq; if(pBufData != NULL) { if(cmdMsg.AllocBuffer(iNum)) memcpy(...
CFepFisSettingMsg cmdMsg;
memcpy( &cmdMsg.m_Data, pPara, sizeof(SFisCmdItem));
cmdMsg.m_iDataNum = iNum;
cmdMsg.m_iDataLen = iNum*sizeof(SFepFisSetting);
cmdMsg.m_bEnd = bEnd;
cmdMsg.m_iSeq = iSeq;
if(pBufData != NULL)
{
if(cmdMsg.AllocBuffer(iNum))
memcpy(cmdMsg.m_pDataBuf,pBufData,cmdMsg.m_iDataLen);
}
else
{
cmdMsg.m_pDataBuf = NULL;
cmdMsg.m_iDataNum = 0;
cmdMsg.m_iDataLen = 0;
}
bool bRet = m_pService->SendMessage( cmdMsg, m_targetAddr, iCmd);
当调用SendMessage时,iNum 为80,在AIX下提示段错误,还没执行到SendMessage函数中,只是参数复制的时候就出错了。将iNum从80改为40后,就好了。
class FIS_EXPORT_CLASS CFepFisSettingMsg : public CFisCmdMsg
{
public:
CFepFisSettingMsg ();
~ CFepFisSettingMsg ();
virtual void ReadBinary(CBufferStream &);
virtual void WriteBinary(CBufferStream &);
virtual bool AllocBuffer(int num);
public:
SFepFisSetting *m_pDataBuf;
};
在程序中根据iNum 数目生成m_pDataBuf。
在windows下运行就没问题。
m_pDataBuf是在堆上分配的啊, 怎么iNum 一多就出现堆栈问题呢?
memcpy( &cmdMsg.m_Data, pPara, sizeof(SFisCmdItem));
cmdMsg.m_iDataNum = iNum;
cmdMsg.m_iDataLen = iNum*sizeof(SFepFisSetting);
cmdMsg.m_bEnd = bEnd;
cmdMsg.m_iSeq = iSeq;
if(pBufData != NULL)
{
if(cmdMsg.AllocBuffer(iNum))
memcpy(cmdMsg.m_pDataBuf,pBufData,cmdMsg.m_iDataLen);
}
else
{
cmdMsg.m_pDataBuf = NULL;
cmdMsg.m_iDataNum = 0;
cmdMsg.m_iDataLen = 0;
}
bool bRet = m_pService->SendMessage( cmdMsg, m_targetAddr, iCmd);
当调用SendMessage时,iNum 为80,在AIX下提示段错误,还没执行到SendMessage函数中,只是参数复制的时候就出错了。将iNum从80改为40后,就好了。
class FIS_EXPORT_CLASS CFepFisSettingMsg : public CFisCmdMsg
{
public:
CFepFisSettingMsg ();
~ CFepFisSettingMsg ();
virtual void ReadBinary(CBufferStream &);
virtual void WriteBinary(CBufferStream &);
virtual bool AllocBuffer(int num);
public:
SFepFisSetting *m_pDataBuf;
};
在程序中根据iNum 数目生成m_pDataBuf。
在windows下运行就没问题。
m_pDataBuf是在堆上分配的啊, 怎么iNum 一多就出现堆栈问题呢?
|
linux和windows上默认堆栈是不同
windows上可以直接设置stack and heap
在linux上可以使用ulimit命令设置,参数是-s
windows上可以直接设置stack and heap
在linux上可以使用ulimit命令设置,参数是-s
|
ulimit
功能说明:控制shell程序的资源。
语 法:ulimit [-aHS][-c ][-d ][-f ][-m ][-n ][-p ][-s ][-t ][-u ][-v ]
补充说明:ulimit为shell内建指令,可用来控制shell执行程序的资源。
参 数:
-a 显示目前资源限制的设定。
-c 设定core文件的最大值,单位为区块。
-d 程序数据节区的最大值,单位为KB。
-f shell所能建立的最大文件,单位为区块。
-H 设定资源的硬性限制,也就是管理员所设下的限制。
-m 指定可使用内存的上限,单位为KB。
-n 指定同一时间最多可开启的文件数。
-p 指定管道缓冲区的大小,单位512字节。
-s 指定堆叠的上限,单位为KB。
-S 设定资源的弹性限制。
-t 指定CPU使用时间的上限,单位为秒。
-u 用户最多可开启的程序数目。
-v 指定可使用的虚拟内存上限,单位为KB。
功能说明:控制shell程序的资源。
语 法:ulimit [-aHS][-c ][-d ][-f ][-m ][-n ][-p ][-s ][-t ][-u ][-v ]
补充说明:ulimit为shell内建指令,可用来控制shell执行程序的资源。
参 数:
-a 显示目前资源限制的设定。
-c 设定core文件的最大值,单位为区块。
-d 程序数据节区的最大值,单位为KB。
-f shell所能建立的最大文件,单位为区块。
-H 设定资源的硬性限制,也就是管理员所设下的限制。
-m 指定可使用内存的上限,单位为KB。
-n 指定同一时间最多可开启的文件数。
-p 指定管道缓冲区的大小,单位512字节。
-s 指定堆叠的上限,单位为KB。
-S 设定资源的弹性限制。
-t 指定CPU使用时间的上限,单位为秒。
-u 用户最多可开启的程序数目。
-v 指定可使用的虚拟内存上限,单位为KB。
|
不会,帮顶
|
顶一下