我有一个定义了静态映射对象的函数,但我发现它似乎会影响以下内存分配,例如 new 运算符或 malloc。示例代码如下:
void foo()
{
static map<string, int> word2idx;
char * data = new char[100];
delete[] data;
word2idx = foo2();
}
map<string,int> foo2()
{
map<string, int> word2idx;
return word2idx;
}
由于函数静态映射对象的定义,分配一小块内存失败,但如果我将静态变量从函数 foo 的范围中删除到全局范围内就可以了,如下所示:
static map<string, int> word2idx;
void foo()
{
char * data = new char[100];
delete[] data;
word2idx = foo2();
}
map<string,int> foo2()
{
map<string, int> word2idx;
return word2idx;
}
我猜在第一个例子中,函数静态变量已经为内存分配了两次(第一次是初始化,第二次是 map 的 operator =),这可能是导致内存分配问题的原因。但我不能保证。谁能给出更合理的解释或对此函数静态变量相关问题的一些参考?