存储在multimap -C ++中的访问指针

时间:2016-02-12 06:46:43

标签: c++ stl

我正在维护一个存储指针变量的多图,代码编译得很好但抛出异常。请查看下面的代码并提供建议

{{1}}

2 个答案:

答案 0 :(得分:2)

您应该按照以下更新代码,如果您想了解原因,请参阅this链接。

multimap<const char*, int **> myMap1;
int *myVals = new int[3];

myVals[0] = 1;
myVals[1] = 1;
myVals[2] = 1;
char * temp = "val1";
myMap1.insert(pair<const char*, int **>(temp, &myVals));

std::multimap<const char*, int **>::iterator it = myMap1.find(temp);
int *storedVals =  *(it->second);

for(int ii = 0; ii<= 2; ii++)
{
    printf("\n Value %d", storedVals[ii]); //Exception thrown here..
}

delete [] myVals;

也更喜欢将auto it用于迭代器而不是std::multimap<const char*, int **>::iterator it。你也不能使用&quot; reinterpret_cast&#39;这里。

答案 1 :(得分:0)

我不确定你在这里使用reinterpret_cast的原因:

地图中的值(second)正在指向int*

如果您使用以下内容更改此行。它会工作:

int *storedVals =  *(it->second); //it->second is a int**

此外,您不应该myVals[2] = 1;您的阵列大小为2.或者您可以将阵列的大小增加到3。