我正在维护一个存储指针变量的多图,代码编译得很好但抛出异常。请查看下面的代码并提供建议
{{1}}
答案 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。