在一个程序中调用一个dll。在调用这个dll的一个函数的时候出现stack overflow 。 这个函数的调用是通过调用程序的一个定时函数执行的。( 在一般的程序中可以通过调整应用程序的栈的大小解决这个问题。一个试验成功。) 但是好像stack与线程有关。那么在vc中我如何调整这个项目的stack大小。是在调用程序中调整还是在dll的程序中调整呢。(就是调整setting中的选项)。 第二个问题就是在这个如果stack和线程有关,那么我起定时函数的时候就是起了一个线程,我怎么调整这个线程的栈大小呢。 用的是这个定时函数timeSetEvent() 。???
double n[0x1000000];
定义在_bstr_t 中
inline _bstr_t::Data_t::Data_t(const char* s) throw(_com_error)
: m_str(NULL), m_RefCount(1)
{
m_wstr = _com_util::ConvertStringToBSTR(s); if (m_wstr == NULL && s != NULL) {
_com_issue_error(E_OUTOFMEMORY);
}
}
的堆栈有问题,你看看你的参数中才四个字节,怎么会溢出呢?
我只是调用
在这一句有问题。 m_wstr = _com_util::ConvertStringToBSTR(s);下面是callback stack的内容:
$$$00001() line 79
_bstr_t::Data_t::Data_t(const char * 0x000b2f64) line 504 + 9 bytes
_bstr_t::_bstr_t(const char * 0x000b2f64) line 220 + 88 bytes
还有一个问题是:
假如如楼上所说在我的程序中没有溢出,那么我修改link下的stack参数,就没有用处吗。这个参数不能影响我的整个程序吗。 难道不能解决这个溢出的问题!
int main(int argc, char* argv[])
{
__asm mov [ebp - 4] , 65
char p ;
p = 'A';
printf("%d\n" , p );
return 0;
}
第一句,其实完成的是第三句的功能,空间是预留的.第一句和第三句是可以随便只要一句的.
int main(int argc, char* argv[])
{
// p = 'A'; 有错误
char p ;
printf("%d\n" , p ); // 这里的p是一个未经过初始化的数据
return 0;
}
就连编译都通不过。