我有以下程序,它将四个字符串存储在地图中并第一次打印。现在它再次运行以检索存储的值。但第二次结果与第一次结果不同。
#include <map>
using namespace std;
void fun_call(void **,char * );
main(){
void *data=NULL;
char value[100];
int i=0,j=0;
char key[][10]={"disk1","disk2","disk3","disk4"};
cout << "printing all mapped values " << endl ;
data = (void *) malloc( 100);
for(j=0;j<2;j++){
for(i=0;i<4;i++){
fun_call(&data,key[i]);
memcpy(value,data,100);
cout << "key ="<<key[i]<<" value is " << value << endl;
}
cout <<"====================="<< endl;
}
}
void fun_call(void **tmp,char name[10])
{
void *tmp_data;
char str[100]="ravindra";
int len =0;
static std::map<std::string,void *> name_data_map;
std::map<std::string,void *>::iterator iter ;
iter=name_data_map.find(name) ;
if ( iter == name_data_map.end())
{
len=strlen(str)+strlen(name)+1;
tmp_data = (void *) malloc ( len );
strcat(str,name);
memcpy(tmp_data,str,len);
name_data_map[name]=tmp_data;
cout << "Inside the if" << endl ;
}
else
cout << "disk pos "<< iter->first << endl;
cout << "Outside the if" << endl ;
iter=name_data_map.find(name) ;
memcpy(*tmp,iter->second,len);
}
输出:
$ ./a.out 打印所有映射值 如果里面 如果在外面 key =disk1 值为 ravindradisk1 如果里面 如果在外面 key =disk2 值为 ravindradisk2 如果里面 如果在外面 key =disk3 值为 ravindradisk3 如果里面 如果在外面 key =disk4 值为 ravindradisk4 ====================== 磁盘 pos disk1 如果在外面 key =disk1 值为 ravindradisk4 磁盘 pos disk2 如果在外面 key =disk2 值为 ravindradisk4 磁盘 pos disk3 如果在外面 key =disk3 值为 ravindradisk4 磁盘 pos disk4 如果在外面 key =disk4 值为 ravindradisk4
知道为什么第二次迭代将所有数据都提供为:“ravindradisk4”