次のプログラムがあります。これは、4 つの文字列をマップに保存し、初めて印刷します。今度は、保存された値を取得するためにもう一度実行します。しかし、2 回目の結果は 1 回目の結果と同じではありません。
#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 マップされたすべての値を印刷する if の内部 ifの外で キー =disk1 値は ravindradisk1 です if の内部 ifの外で キー =disk2 値は ravindradisk2 です if の内部 ifの外で キー =disk3 値は ravindradisk3 です if の内部 ifの外で キー =disk4 値は ravindradisk4 です ===================== ディスク位置 disk1 ifの外で キー =disk1 値は ravindradisk4 ディスク位置 disk2 ifの外で キー =disk2 値は ravindradisk4 ディスク位置 disk3 ifの外で キー =disk3 値は ravindradisk4 ディスク位置 disk4 ifの外で キー =disk4 値は ravindradisk4 です
2回目の反復ですべてのデータが「ravindradisk4」として提供される理由