typedef struct NetAddr_str{
char showName[40];
char netAddr[256];
int isSystemSet;
}NetAddr_t,*pNetAddr_t;
在程序中NetAddr_t* NodeAddr = new NetAddr_t();失败 并说内存 不足 请教啊
char showName[40];
char netAddr[256];
int isSystemSet;
}NetAddr_t,*pNetAddr_t;
在程序中NetAddr_t* NodeAddr = new NetAddr_t();失败 并说内存 不足 请教啊
如果不是重复new使内存出错,可以下个断点看看第一个new的时候是不是出错,如果只是new第一次的时候出错,那么用NetAddr_t* NodeAddr = new NetAddr_t;试试
这个是写读取sqlite 数据库的.bool infoAccess::getNetAddr(NetAddr_t** pAddr,int& addrCount)
{
if(!UserpSqlite){//这个是用户数据库指针 没有问题
return false;
}
char* errmsg = NULL;
char **ppBuddy = NULL;
int Row = -1;
int Column = -1;
int ret = -1;
int SizeLeng = sizeof(NetAddr_t);
ret = sqlite3_get_table(UserpSqlite, "select * from NetAddr;", &ppBuddy,&Row,&Column,&errmsg);
if(ret == SQLITE_OK){
int Index = Column;
addrCount = Row;
if(Row <= 0){
return true;
}
NetAddr_t* pListNetPool = (NetAddr_t*)malloc(SizeLeng*Row);
if(pListNetPool == NULL){
return false;
}
memset(pListNetPool,'\0',SizeLeng*Row);
unsigned int *pTemp = (unsigned int*)pListNetPool;
for(int i=0; i<Row; i++){
NetAddr_t dBuddy;
if(pTemp == NULL){
return false;
}
memset(&dBuddy, '\0',SizeLeng);
char name[STRING_40];//string_40 表示大小为40啊
char value[INFOACCESS_STRING_MAX];//256
for(int j=0; j<Column; j++){
memset(name, '\0', STRING_40);
memset(value, '\0', INFOACCESS_STRING_MAX);
sprintf(name, "%s",ppBuddy[j]);
sprintf(value, "%s",ppBuddy[Index]);
setNetAddrStruct(&dBuddy, name, value);//这个是吧内容存到数组里
++ Index;
}
memcpy((NetAddr_t*)pTemp,&dBuddy,SizeLeng);
pTemp += SizeLeng;
}
sqlite3_free_table(ppBuddy);
*pAddr = pListNetPool;
}
return true;
}
bool infoAccess::setNetAddrStruct(NetAddr_t* pAddr,char* pNodeName,char* pNodeValue)
{
if((!pAddr) || (!pNodeName) || (!pNodeValue)){
return false;
}
if(strcmp(pNodeName, "showName") == 0){
strcpy(pAddr->showName,pNodeValue);
}else if(strcmp(pNodeName, "address") == 0){
strcpy(pAddr->netAddr,pNodeValue);
}else if(strcmp(pNodeName, "isSystemSet") == 0){
pAddr->isSystemSet = atoi(pNodeValue);
}
return true;
}
int CNetAddrManage::GetAddrList()
{
int NumberList = 0;
NetAddr_t* pNetAddr = NULL;
int sizeBuf = sizeof(NetAddr_t);
pInfoAccess->getNetAddr(&pNetAddr,NumberList);
if(pNetAddr == NULL){
return -1;
}
unsigned int * tmp = (unsigned int *)pNetAddr;
for(int i = 0 ; i < NumberList ; i ++){
NetAddr_t* NodeAddr = new NetAddr_t();//这里new的时候错
NetAddr_t* pTmpAddr = (NetAddr_t*)tmp;
memset((void*)NodeAddr,'\0',sizeBuf);
strcpy(NodeAddr->netAddr,pTmpAddr->netAddr);
strcpy(NodeAddr->showName,pTmpAddr->showName);
NodeAddr->isSystemSet = pTmpAddr->isSystemSet;
NetAddrList_vec.push_back(NodeAddr);
tmp += sizeof(NetAddr_t);
}
if(pNetAddr != NULL){
free(pNetAddr);
pNetAddr = NULL;
}
return 0;
}
NetAddr_t* NodeAddr = new NetAddr_t();//这里new的时候错
.....
.....
}
NumberList 等于多少?for循环什么时候出错的?
{
CWinThread* pWinThread = AfxGetThread();
if ( pWinThread != NULL )
{
lResult = pWinThread->ProcessWndProcException(e, &pThreadState->m_lastSentMsg);
TRACE1("Warning: Uncaught exception in WindowProc (returning %ld).\n",
lResult);
}
else
{
TRACE0("Warning: Uncaught exception in WindowProc.\n");
lResult = 0;
}
DELETE_EXCEPTION(e);
}
END_CATCH_ALL
好象在lResult = pWinThread->ProcessWndProcException(e, &pThreadState->m_lastSentMsg);用这个函数不停的申请内存 过一会就跳出内存不足
如果去掉不出错的话,这个结构体的初始化可以变换一下,不要这样初始化 for(int i = 0 ; i < NumberList ; i ++){
NetAddr_t* NodeAddr = new NetAddr_t();//这里new的时候错
NetAddr_t* pTmpAddr = (NetAddr_t*)tmp;
//memset((void*)NodeAddr,'\0',sizeBuf); // 去掉这句看看还会不会出错
strcpy(NodeAddr->netAddr,pTmpAddr->netAddr);
strcpy(NodeAddr->showName,pTmpAddr->showName);
NodeAddr->isSystemSet = pTmpAddr->isSystemSet;
NetAddrList_vec.push_back(NodeAddr);
tmp += sizeof(NetAddr_t);
}// 结构体的初始化可以这样,定义结构体的时候处理
typedef struct NetAddr_str{
char showName[40];
char netAddr[256];
int isSystemSet; NetAddr_str(){
memset( showName, 0, sizeof(showName) );
memset( netAddr, 0, sizeof(netAddr) );
isSystemSet = 0;
}
}NetAddr_t,*pNetAddr_t;