游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5745|回复: 9

VC的Release和debug模式下一些函数是不是不一样?

[复制链接]

33

主题

101

帖子

107

积分

注册会员

Rank: 2

积分
107
发表于 2007-9-3 18:37:00 | 显示全部楼层 |阅读模式
我用TextOut  最后一个参数字符串长度我用strlen

结果debug显示正常

但是release在应有长度之后还有乱码~  貌似求的结果比应有结果长,所以显示乱码

这是为什么?

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-9-3 20:00:00 | 显示全部楼层

Re:VC的Release和debug模式下一些函数是不是不一样?

有区别,但是区别只在于debug会包含调试信息,并且不作任何优化。

用GetLastError检查一下是否有错误。

如果还不行,请帖上部分代码。

33

主题

101

帖子

107

积分

注册会员

Rank: 2

积分
107
 楼主| 发表于 2007-9-3 21:20:00 | 显示全部楼层

Re:VC的Release和debug模式下一些函数是不是不一样?

for(j=0;j<i+1;j++)
        {
                memset(WORDS,0,100);
                if(j==i)
                {
                        for(k=0;k<lenth;k++)
                                WORDS[k]=words[j*100+k];
                }
                else
                {
                        for(k=0;k<100;k++)
                                WORDS[k]=words[j*100+k];
                }
                TextOut(hdc,20,20+j*40,WORDS,strlen(WORDS));
        }

程序代码一点不变  release下  显示应该长度后 后面多了一些乱码

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-9-3 22:10:00 | 显示全部楼层

Re:VC的Release和debug模式下一些函数是不是不一样?

代码少了点,不过单从这些估计,显然是哪块儿逻辑有问题,导致溢出了。debug下运行时会检查,但是release下不会。

你最好自己先单步跟踪下。再不行,就贴更详细点的代码。

33

主题

101

帖子

107

积分

注册会员

Rank: 2

积分
107
 楼主| 发表于 2007-9-4 12:46:00 | 显示全部楼层

Re:VC的Release和debug模式下一些函数是不是不一样?

就是显示文字  没其他和他相关的东西 然后我把strlen(WORDS)换成k  其实两个是相等的
然后就没乱码了~
strlen有问题吗?

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-9-4 13:34:00 | 显示全部楼层

Re:VC的Release和debug模式下一些函数是不是不一样?

没其他和他相关的东西
======================

i是什么?lenth又是什么?words多大,包含特殊的字符没?

对我来说这些就是相关的。

如果strlen(WORDS)换成k 没问题的话,那说明你的字符可能有问题。

你断点看看TextOut(hdc,20,20+j*40,WORDS,strlen(WORDS));这句,看看出问题前有什么不对的。

实在还不行,请发个尽量完整的代码上来。

33

主题

101

帖子

107

积分

注册会员

Rank: 2

积分
107
 楼主| 发表于 2007-9-4 15:08:00 | 显示全部楼层

Re:VC的Release和debug模式下一些函数是不是不一样?

words就是一个汉字字符串
lenth是用strlen words得到  i是lenth/100(整除)
我是想实现对一段话的分排显示  每排宽度100

words是函数参数
int lenth=strlen(words);
        int i,j,k;
        char*WORDS= new char[100];
        HDC hdc;
        surface->GetDC(&hdc);
        HFONT newfont,oldFont;

        SetBkMode(hdc, TRANSPARENT);
        SetTextColor(hdc, MESSAGE_RGB);

        newfont=CreateFont(20,0,0,200,1500,0,0,0,ANSI_CHARSET,0,0,0,0,MESSAGE_FONTNAME);
        oldFont=(HFONT)SelectObject(hdc,newfont);
        i=lenth/100;
        lenth=lenth%100;

这是上面的代码

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2007-9-4 16:03:00 | 显示全部楼层

Re:VC的Release和debug模式下一些函数是不是不一样?

无语,很明显是连C的基本常识都没有,字符串没结束符.

33

主题

101

帖子

107

积分

注册会员

Rank: 2

积分
107
 楼主| 发表于 2007-9-5 15:44:00 | 显示全部楼层

Re:VC的Release和debug模式下一些函数是不是不一样?

错了  不是你说的问题  不过还是一个幼稚的问题  strlen得到的是不算结束符的 所以最后WORDS没有结束符

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2007-9-7 16:01:00 | 显示全部楼层

Re:VC的Release和debug模式下一些函数是不是不一样?

我有两次遇到DEBUG和Release运行不一样,最后都是因为有没初始化的变量,debug和release初值不一样,在debug里碰巧没出错
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-18 21:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表