C++地图Excel BADIAccess(仅苹果)

C++地图Excel BADIAccess(仅苹果),c++,macos,map,exc-bad-access,C++,Macos,Map,Exc Bad Access,在Windows7和Windows8上运行良好。然而,当在XCode 4中运行时,当有人加载地图时,我在第二次迭代中获得EXC_BAD_访问权,选择从标题加载地图 您可以使用 get_key_val函数的启动方式如下: std::string* Map::get_key_val( std::string* line ) { std::string key_val[2]; return key_val; } 结局是这样的: std::string* Map::get_key_val(

在Windows7和Windows8上运行良好。然而,当在XCode 4中运行时,当有人加载地图时,我在第二次迭代中获得EXC_BAD_访问权,选择从标题加载地图

您可以使用

get_key_val函数的启动方式如下:

std::string* Map::get_key_val( std::string* line )
{
  std::string key_val[2];
  return key_val;
}
结局是这样的:

std::string* Map::get_key_val( std::string* line )
{
  std::string key_val[2];
  return key_val;
}

您正在返回指向堆栈变量的指针。从函数返回时,key_val变量不再存在,因此指针无效,数组中的两个字符串值将被销毁。后续行为未定义。

对于C++11以后的移动语义,这样做的必要性较低。您只需返回std::string,移动操作符应避免任何浪费的副本。

是否有更简单的示例?你要求人们做大量的阅读和研究。您也可以在processMat中解决问题:是的,我用行链接到它,应该复制代码,对不起。德鲁多曼和山姆·米勒:我一直在尝试,但无法复制。虽然我认为这是因为我在main中做了所有的事情,而不是添加了另一个函数,现在我知道了问题所在,很容易重新创建,但我会继续添加上面的编辑,以供未来的观众观看。谢谢,我记得考虑过这一点,但我觉得我太沮丧了,忘记了。现在我要做的是void Map::get_key_val std::string*line,std::string*key,std::string*value;这是正确的方法吗?那可能有效。我会通过引用而不是指针来传递这些参数,不过:void Map::get\u key\u valstd::string const&line、std::string&key、std::string&value。