String 为什么将字符串指针强制转换为空指针并返回会导致字符串数据不显示?(Opencv)

String 为什么将字符串指针强制转换为空指针并返回会导致字符串数据不显示?(Opencv),string,pointers,opencv,void,String,Pointers,Opencv,Void,我试图创建一个函数,在一个地方初始化每个OpenCV窗口的所有鼠标处理程序。代码在主循环中工作,但不在我的函数中(是的,我通过引用传递)。 问题似乎源于将指针传递给字符串-当它从另一端出现时,它将无法成功地取消引用(*)。有什么好处 下面是我所说的一个极简主义示例(它为两个相同的窗口设置鼠标处理程序-一个窗口工作,另一个窗口不工作): //mouse problem.cpp:定义控制台应用程序的入口点。 #包括“stdafx.h” #包括“opencv2/core/core.hpp” #包括“o

我试图创建一个函数,在一个地方初始化每个OpenCV窗口的所有鼠标处理程序。代码在主循环中工作,但不在我的函数中(是的,我通过引用传递)。
问题似乎源于将指针传递给字符串-当它从另一端出现时,它将无法成功地取消引用(*)。有什么好处

下面是我所说的一个极简主义示例(它为两个相同的窗口设置鼠标处理程序-一个窗口工作,另一个窗口不工作):

//mouse problem.cpp:定义控制台应用程序的入口点。
#包括“stdafx.h”
#包括“opencv2/core/core.hpp”
#包括“opencv2/imgproc/imgproc.hpp”
#包括
#包括
#包括//对于cout、cin
使用名称空间std;
使用名称空间cv;
void onMouse(int事件、int x、int y、int标志、void*param){
string windowname=*((string*)param);//只需重新设置void*,我们就可以将它传递到鼠标句柄中,以创建字符串
if(windowname.empty()){

cout问题与强制转换无关。您保留了一个指向临时
字符串
对象的指针,并试图在对象超出范围后取消对该指针的引用

以下是:

initializer("frameB");
相当于:

initializer(std::string("frameB"));

换句话说,创建了一个临时对象,函数获取并保留该临时对象的地址。由于临时对象在语句末尾消失,您将看到一个悬空的指针。

那么我看到的frameB的地址是什么?您是对的。:)太简单了。谢谢!那么我如何传入没有h的字符串呢避免这个问题?我不能,可以吗?我必须将每个字符串保存在它自己的单独变量中?这样就不利于将其保存在函数中(
initializer(std::string("frameB"));