【发布时间】:2013-07-17 23:11:00
【问题描述】:
以下可以吗?
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++ 中使用 new 而不是 malloc。但是如果我这样做,如果出现任何问题怎么办?
编辑:代码编译良好且运行良好(g++ 4.6.3)。不知道为什么这个问题被搁置,但我只想知道它在技术上是否正确(我不关心风格)。我不确定的一件事是是否行
maps[i] = map<string,int>();
在语法上是正确的,以及它是否真的会导致一个人建议的意外行为。
尚未有人提供对 C++ 规范的参考,表明我正在做的事情是未定义的。所以这个问题还是没有答案。
【问题讨论】:
-
你不应该这样做。
-
不,完全不行。
-
大错特错。使用
std::vector<std::map<std::string, int>>。没有malloc,没有new,没有任何借口。 -
显然,愤怒和愤怒发生了。
-
您为什么要这样做? C++ 中到处都是 C 来初始化 C++ 容器?没有。
标签: c++ pointers syntax malloc sizeof