求助:程序realease编译后运行报错

n27741 2007-07-11 03:22:04
在debug模式下 去掉包 去掉rtl linker 运行没有任何问题

realease编译 去掉报 去掉rtl linker 运行时包内存错误!

不得要领 请教!
...全文
171 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
n27741 2007-07-15
  • 打赏
  • 举报
回复
解决拉!
原来是调用dll 里面 __stdcall函数的
声明函数指针没有加 __stdcall所致

也就是说 如果你在dll里面写了一个函数 压栈方式是 __stdcall
那么 声明函数指针的时候 也必须 __stdcall 如果不加的话 debug会通过 release会报错!

n27741 2007-07-14
  • 打赏
  • 举报
回复
我发现拉!

我dll中的导出函数 为 __stadcall

将stdcall去掉,调用的时候用 _functionName

release编译 或者 debug时候把stack frames 去掉 编译运行 内存就不报错了!

初步认为 是 __stdcall带来的压栈问题
n27741 2007-07-14
  • 打赏
  • 举报
回复
stack frames 这个项!

如果不勾选 debug编译 会出现和release编译一样的错!
i_love_pc 2007-07-13
  • 打赏
  • 举报
回复
我在安装2007之后,cb6就出现这个问题,linker->use dynamic rtl就会弹出cpu窗口,而去掉就没问题。 新建的工程也是一样,最后重新安装了6.0。
n27741 2007-07-13
  • 打赏
  • 举报
回复
希望大家都来讨论下这个问题

我反复测试之后,发现 全局变量和错乱的头文件(实在说不清这个头文件有什么问题,总之就包含了一堆函数,全局函数)
debug下没问题,release 如果编译 选择 speed 会出现内存错误,而且内存错误出现的地方
居然是 赋值得地方 比如 给字符串 和 Int赋值

如果release编译 优化选择 none 则什么问题都没有

我已经排除大部分问题,但是 还有一处会弹出cpu调试窗口 还在紧张调试中
jacknes009 2007-07-11
  • 打赏
  • 举报
回复
那会不会其他的什么变量越界了呢?
n27741 2007-07-11
  • 打赏
  • 举报
回复
这个问题很怪
我 如果是release编译 form的 Close();函数不响应
纳闷了都

我检查一下有没有数组越界的情况
cczlp 2007-07-11
  • 打赏
  • 举报
回复
我的经验是,如果越界很少, 比如1,2个字节, 就可能DEBUG下没有问题而Release下有问题
cczlp 2007-07-11
  • 打赏
  • 举报
回复
可能是数组越界了.
在VC版经常有人问这样问题.

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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