stack overflow 问题!

chinarendotcom 2004-06-08 10:51:42
在一个程序中调用一个dll。在调用这个dll的一个函数的时候出现stack overflow 。 这个函数的调用是通过调用程序的一个定时函数执行的。( 在一般的程序中可以通过调整应用程序的栈的大小解决这个问题。一个试验成功。) 但是好像stack与线程有关。那么在vc中我如何调整这个项目的stack大小。是在调用程序中调整还是在dll的程序中调整呢。(就是调整setting中的选项)。

第二个问题就是在这个如果stack和线程有关,那么我起定时函数的时候就是起了一个线程,我怎么调整这个线程的栈大小呢。 用的是这个定时函数timeSetEvent() 。???
...全文
304 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinarendotcom 2004-06-10
  • 打赏
  • 举报
回复
up
nightsuns 2004-06-09
  • 打赏
  • 举报
回复
但是如果改成这样:
int main(int argc, char* argv[])
{
// p = 'A'; 有错误
char p ;
printf("%d\n" , p ); // 这里的p是一个未经过初始化的数据
return 0;
}
就连编译都通不过。
nightsuns 2004-06-09
  • 打赏
  • 举报
回复
所有的局部变量空间都会由编译器在“{”之前预留的,虽然编译器可以做到什么时候定义什么时候使用,但这不是二进制的标准,比如:
int main(int argc, char* argv[])
{

__asm mov [ebp - 4] , 65
char p ;
p = 'A';
printf("%d\n" , p );
return 0;
}
第一句,其实完成的是第三句的功能,空间是预留的.第一句和第三句是可以随便只要一句的.
chinarendotcom 2004-06-09
  • 打赏
  • 举报
回复
up
chinarendotcom 2004-06-09
  • 打赏
  • 举报
回复
up
chinarendotcom 2004-06-09
  • 打赏
  • 举报
回复
up

nightsuns 2004-06-08
  • 打赏
  • 举报
回复
LINK选项中有将堆栈调大的选项

还有你上面的程序是inline的,所以造成原因的是调用它的那个函数中
的堆栈有问题,你看看你的参数中才四个字节,怎么会溢出呢?
chinarendotcom 2004-06-08
  • 打赏
  • 举报
回复
我是在这个函数中抛出 stack overflow 的。
定义在_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);
}
}

fireseed 2004-06-08
  • 打赏
  • 举报
回复
那个DLL肯定有问题,很可能是这样的语句造成的:
double n[0x1000000];
halk 2004-06-08
  • 打赏
  • 举报
回复
在createthread中有个参数,就是用来设定stack大小的,默认是1m。
chinarendotcom 2004-06-08
  • 打赏
  • 举报
回复
上面的函数是vc提供的_bstr_t 类。
我只是调用
在这一句有问题。 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参数,就没有用处吗。这个参数不能影响我的整个程序吗。 难道不能解决这个溢出的问题!

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧