我在一个函数里定义了一个局部变量,然后让他返回,然而在Debug时会提示变量的指针有冲突(只是一个单纯的bool类型的返回,貌似没有指针),然而在release下没有问题。不知道为什么,查了相关局部变量返回的知识但感觉都不是很明确,请教各位大大了
我程序大致是这样的:
bool fun1()
{
bool bIsSuccess = funOut();
return bIsSuccess;
}
因为变量返回的时候是复制返回值给要接受的变量,所以我感觉即使局部变量销毁,它的值也被复制了呀,不应该有问题啊,出现错误时时在return bIsSuccess;的时候,然而出现错误后继续运行,程序还是会运行下去= =
只有这么点分了,请笑纳~
我程序大致是这样的:
bool fun1()
{
bool bIsSuccess = funOut();
return bIsSuccess;
}
因为变量返回的时候是复制返回值给要接受的变量,所以我感觉即使局部变量销毁,它的值也被复制了呀,不应该有问题啊,出现错误时时在return bIsSuccess;的时候,然而出现错误后继续运行,程序还是会运行下去= =
只有这么点分了,请笑纳~
结构体、char *就不行了
其中vbIsSuccess 是VARIANT_BOOL类型
其中vbIsSuccess 是VARIANT_BOOL类型
其中vbIsSuccess 是VARIANT_BOOL类型
具体问题需要具体分析,COM接口一般都是stdcall,即this 指针会当作堆栈参数push进去而不是放在ecx中,这样在funout运行结束时就可能导致vbIsSuccess 的堆栈被覆盖而破坏。最好用windbg跟一下就清清楚楚了。
同感,感觉是funout本身实现中的问题
可以在微软的官方网站上下载的,用法的话只能靠你自己去钻研一下了。。
原先的函数单独在程序中跑没有任何问题,然而现在封成DLL并增加了VARIANT_BOOL返回值后就出现问题了,主要是我挺肯定函数没什么问题的呢
不然就
bIsSuccess = ((HRESULT (__stdcall *)(unsigned long int))funOut)(0)试试
VARIANT_BOOL funout()
{
....
return VARIANT_TRUE;
}当然这个函数存在与COM的DLL中。
而我的程序中用如下方式进行调用
void fun1()
{
VARIANT_BOOL vbIsSuccess;
try
{
vbIsSuccess = m_Dispatch.InvokeHelper(0xb, DISPATCH_PROPERTYGET, VT_BOOL, (void*)&vbIsSuccess, NULL);
}
catch(CException *e)
{
e->ReportError();
e->delete();
}
return vbIsSuccess;
}
调用InvokeHelper并获得的vbIsSuccess值都没有问题,但是debug单步调试到函数的最后一个右括号时出现上述错误悲剧~~
可能有问题。而不是局部变量。
返回什么值啊?是不是在
#if define _DEBUG
下?
{
bool bIsSuccess = funOut();
return bIsSuccess;
}
信息不够,起码给个funOut()声明
func1 是 void 型的,结果最后却返回值?