以下は大丈夫ですか?
int n=5;
map<string,int> * maps = (map<string,int> *)malloc(n*sizeof(map<string,int>));
for (int i=0; i<n; i++) {
maps[i] = map<string,int>();
char * i_str = (char *)malloc(10);
sprintf(i_str,"%d",i);
char * key = (char *)malloc(100);
strcpy(key,"key");
strcat(key,i_str);
(maps[i])[string(key)] = i*i;
}
C++ では malloc ではなく new を使用するように言われていることを知っています。しかし、このようにすると、問題が発生する可能性がある場合はどうなりますか?
編集: コードは正常にコンパイルされ、正常に実行されます (g++ 4.6.3)。質問が保留になっている理由はわかりませんが、技術的に正しいかどうかを知りたいだけです(スタイルは気にしません)。よくわからないことの1つは、行が
maps[i] = map<string,int>();
構文的に正しいかどうか、また、ある人が示唆したように、それが実際に予期しない動作につながるかどうか.
私がやっていることは未定義であることを示す C++ 仕様への参照をまだ誰かが提供していません。したがって、この質問はまだ答えられていません。