存到map中的指针取出来总为NULL,奇怪

hahu 2005-04-22 09:09:03
//插入操作
pSubFlagItem = new FISubFlagItem;
memset(pSubFlagItem, 0, sizeof(FISubFlagItem));
pair<string, FISubFlagItem *> value(asCcy.c_str(), pSubFlagItem);
i_mapSubFlag.insert(value);
pSubFlagItem = i_mapSubFlag[asCcy.c_str()];
if (pSubFlagItem == NULL)
abc = "%$^%$^@#@#这个地方也空的";
//遍历操作
FISubFlagItem *pItem;
SubFlag_iter = i_mapSubFlag.begin();
for (; SubFlag_iter != i_mapSubFlag.end(); ++SubFlag_iter)
{
pItem = (FISubFlagItem *)(*SubFlag_iter).second;
if (pItem != NULL)
//这个地方总是为NULL,为什么
...全文
255 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hahu 2005-04-24
  • 打赏
  • 举报
回复
鬼呀

给分咯
runall 2005-04-22
  • 打赏
  • 举报
回复
鬼呀
bing_huo 2005-04-22
  • 打赏
  • 举报
回复
难道是传说中的rpwt?
QunKangLi 2005-04-22
  • 打赏
  • 举报
回复
用法应该没错,俺的一个测试程序运行都是正常的:
#include <map>
#include <string>
using namespace std ;
map<string, int*> m ;
void insert( const char *str, int *value )
{
pair<string, int*> v(str, value) ;
m.insert(v) ;
}
void disp()
{
pair<string, int*> p ;
map<string, int*>::iterator iter ;
for( iter = m.begin() ; iter != m.end() ; ++iter ) {
p = *iter ;
delete p.second ;
}
}
int main( int argc, char ** argv )
{
insert( "abc", new int(1) ) ;
insert( "bcd", new int(2) ) ;
insert( "cde", new int(3) ) ;
disp() ;
return 0 ;

}
hahu 2005-04-22
  • 打赏
  • 举报
回复
是啊!真奇怪!

我另外建一个工程

类似的代码也不空

真糟糕
Stephen_Ma 2005-04-22
  • 打赏
  • 举报
回复
以下代码不空啊!

#include <iostream>
#include <string>
#include <map>

using namespace std;

typedef int FISubFlagItem;

void main()
{
string asCcy = "ok";
map<string, FISubFlagItem*> i_mapSubFlag;

//插入操作
FISubFlagItem* pSubFlagItem = new FISubFlagItem;
memset(pSubFlagItem, 0, sizeof(FISubFlagItem));
pair<string, FISubFlagItem *> value(asCcy.c_str(), pSubFlagItem);
i_mapSubFlag.insert(value);
pSubFlagItem = i_mapSubFlag[asCcy.c_str()];
if (pSubFlagItem == NULL)
{
cout << "%$^%$^@#@#这个地方也空的" << endl;
}

//遍历操作
FISubFlagItem *pItem;
map<string, FISubFlagItem*>::iterator SubFlag_iter = i_mapSubFlag.begin();
for (; SubFlag_iter != i_mapSubFlag.end(); ++SubFlag_iter)
{
pItem = (FISubFlagItem *)(*SubFlag_iter).second;
if (pItem != NULL)
{
cout << pItem << endl; //这个地方总是为NULL,为什么
}
}
}

whyglinux 2005-04-22
  • 打赏
  • 举报
回复
if (pSubFlagItem == NULL)
abc = "%$^%$^@#@#这个地方也空的";

不知道此时pSubFlagItem 是否为NULL? 如果你的 new 不抛出异常,你应该把上面的语句放在 pSubFlagItem = new FISubFlagItem;之后。

如果pSubFlagItem 是 NULL,那么 “if (pItem != NULL) //这个地方总是为NULL,为什么”也就是很自然的了,因为你 insert 的就是一个NULL指针。
bing_huo 2005-04-22
  • 打赏
  • 举报
回复
FISubFlagItem 什么东东? 还要手动清0?

64,421

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧