我自己先来
今天车间质量检验部返回一个很奇怪的问题
一个以前很好的产品现在软件出问题(市场检验都超过半年了)
提示的错误是什么
Win32 错误,代码为 87
我想了很久都想象不出什么问题,刚开始以为是瑞星搞的鬼
后来用 msconfig 配置测试一下才发现是
HP 7268 打印机的服务程序搞的鬼
该服务程序开辟了一个名为 MyShareMemName 的内存共享文件
而我从网上 Copy 的代码写出来的的名字也是 MyShareMemName
它老是往里面写数据,把我的数据都破坏了
我实在没有想到的是 HP 这样的大公司也会使用这么简单的名字
这个可是我们小公司才会出现的问题呀
我提醒大家:
做这个程序或者控件一定要搞一些特别的名字,否则到时可是很难查的哟?
137 个解决方案
#1
大家要踊跃一点哟
特别是 JSP 等老大最好也说一些
特别是 JSP 等老大最好也说一些
#2
有同感,作项目命名很重要,我参加的一个项目命名就很特殊,但非常容易理解。
#3
C++Builder 有生成唯一串的函数!
#4
其实我的目的不在于讨论我的错误
仅仅是想大家也说一说自己曾犯的低级错误而已
仅仅是想大家也说一说自己曾犯的低级错误而已
#5
经过了多次的思考及实验,我觉得我现在的命名规则已经非常好了,说出来跟大家分享下吧:
首先是分类:
命名分:函数名,变量名,常量,宏
而变量和常量中作用域分全局、局部、静态;类型分整型、字符型、字符串型、结构、类 等等。
如何让这些名称让人一看就知道他是函数,或是变量、变量的作用域、类型及意义呢?!
我的做法是:函数用大小混合定义 如:CommandAssay();SendPage();等命名都采用自注释命名,不怕长,但尽量避免使用缩写。
变量全局使用g(Global)表示、局部l(Local)表示、静态使用s(Static)表示。
i表示整形(Interger),c表示字符型(Char),f表示文件(File),d表示浮点数(Double,foalt)e表示枚举(Enum),s表示结构(Struct),a表示字符串(AnsiString),t表示 类(Class);
//属性
v表示 一般变量(Variable),c表示常量(Coust),a表示 数组(Array),p表示指针(Point);
例如:定义局部的文件指针可以定义为:FILE *lfp_source, *lfp_dest;
l:局部,f:文件类型,p:这个变量是指针。于是lfp_source就是源文件指针,lfp_dest是目标文件指针。
全局整形变量:int giv_scr_len;
局部字符指针:char *lcp_scr_hig;
全局结构数组:struct CELL_STRUCT gsa_cell_dis[MAXNUM];
等……
宏当然就全部用大写加下划线组成啦,这里不给例子了
首先是分类:
命名分:函数名,变量名,常量,宏
而变量和常量中作用域分全局、局部、静态;类型分整型、字符型、字符串型、结构、类 等等。
如何让这些名称让人一看就知道他是函数,或是变量、变量的作用域、类型及意义呢?!
我的做法是:函数用大小混合定义 如:CommandAssay();SendPage();等命名都采用自注释命名,不怕长,但尽量避免使用缩写。
变量全局使用g(Global)表示、局部l(Local)表示、静态使用s(Static)表示。
i表示整形(Interger),c表示字符型(Char),f表示文件(File),d表示浮点数(Double,foalt)e表示枚举(Enum),s表示结构(Struct),a表示字符串(AnsiString),t表示 类(Class);
//属性
v表示 一般变量(Variable),c表示常量(Coust),a表示 数组(Array),p表示指针(Point);
例如:定义局部的文件指针可以定义为:FILE *lfp_source, *lfp_dest;
l:局部,f:文件类型,p:这个变量是指针。于是lfp_source就是源文件指针,lfp_dest是目标文件指针。
全局整形变量:int giv_scr_len;
局部字符指针:char *lcp_scr_hig;
全局结构数组:struct CELL_STRUCT gsa_cell_dis[MAXNUM];
等……
宏当然就全部用大写加下划线组成啦,这里不给例子了
#6
我在某系统中设置一个日志表,每次操作时先查询该表有无相关记录,如果有,则修改其中某字段,否则添加一条记录。
在实验室、生产测试都没有问题。
投产半年后,客户反映系统效率下降,由每分钟1万笔降到500笔。
跟踪调查,发现该日志表已有几十万条记录,每次查询费时很长。
后询问同行才知道,别的系统只保留3个月数据,超过时间即删除(反正客户每天都在备份数据)。
后修改数据库脚本程序,自动定时清除旧数据,并优化查询语句,解决该问题。
从此获得经验:
经常查询的数据表,绝对不能太大,如果大了,要么删除,要么分表。
在实验室、生产测试都没有问题。
投产半年后,客户反映系统效率下降,由每分钟1万笔降到500笔。
跟踪调查,发现该日志表已有几十万条记录,每次查询费时很长。
后询问同行才知道,别的系统只保留3个月数据,超过时间即删除(反正客户每天都在备份数据)。
后修改数据库脚本程序,自动定时清除旧数据,并优化查询语句,解决该问题。
从此获得经验:
经常查询的数据表,绝对不能太大,如果大了,要么删除,要么分表。
#7
if(i=0) 实际为if(i==0)
最好写成if(0==i),这样写成if(0=i)就出错
最好写成if(0==i),这样写成if(0=i)就出错
#8
MyFunc(int i....)
{
for(int i=0;...)
...
}
于是就把i的值改写了,运行结果不对。找了半天才发现。
教训呀。
{
for(int i=0;...)
...
}
于是就把i的值改写了,运行结果不对。找了半天才发现。
教训呀。
#9
new了没delete,呵呵,够低级。如果内存看涨,很可能就是这个低级错误。
#10
up
#11
这个贴子应该置顶:)
1。我做的文件中的关键字索引,后来发现使用字符树是一个原则性的错误(虽然效率上可用,但始终就还是不如BTree,因为磁盘访问次数太多),即使有LRU缓冲,以及这个数据结构本身的特点,但是效率还是不高
2。3d矢量图形编辑器,被我丢到了垃圾桶,虽然能达到一定的功能,但是把所有的图元都炸开程线段是个愚蠢的处理方式。
3。五子棋,我大一的时候写的,过分依赖搜索3,4的胜局,最后却发现还有很多类似活3的期式。最后是我自己的五子棋技术提高了,这个东西我也在也没写了。
--我发现我就没做过好的东西,做完一个东西以后,过个几个月就觉得太垃圾了,很多低级和原则性的错误。
1。我做的文件中的关键字索引,后来发现使用字符树是一个原则性的错误(虽然效率上可用,但始终就还是不如BTree,因为磁盘访问次数太多),即使有LRU缓冲,以及这个数据结构本身的特点,但是效率还是不高
2。3d矢量图形编辑器,被我丢到了垃圾桶,虽然能达到一定的功能,但是把所有的图元都炸开程线段是个愚蠢的处理方式。
3。五子棋,我大一的时候写的,过分依赖搜索3,4的胜局,最后却发现还有很多类似活3的期式。最后是我自己的五子棋技术提高了,这个东西我也在也没写了。
--我发现我就没做过好的东西,做完一个东西以后,过个几个月就觉得太垃圾了,很多低级和原则性的错误。
#12
系统中的命名很重要,最好有一个详细的文档进行规范.
数据库表名称,字段名称,源程序的目录名称,源程序的文件名称,
控件名称,变量名称,函数名称等等.
如果设计好了,系统中会省很多事,否则会感觉很乱.
数据库表名称,字段名称,源程序的目录名称,源程序的文件名称,
控件名称,变量名称,函数名称等等.
如果设计好了,系统中会省很多事,否则会感觉很乱.
#13
我做的项目,在同一个项目的B一个模块里图方面引用了A模块的一个Form,后来程序经常出现非法地址访问错误,仔细检查代码没有发现问题,最后发现是这个Form include的是DataModule1.h,而这个模块应该include的是DataModule.h,但最奇怪的是我这个模块里根本就就没有DataModule1.h,编绎居然可以通过。并且可以打开该头文件(是另一个模块里的DataModule1.h,但不在同一个项目文件夹里),不知道是什么回事。
#14
if(!vol[i])
{
vol[i] = new TCSpinEdit(this);
}
vol[i]->Parent = masPanel[i];
vol[i]->Value = i;
vol[i]->Left = VOL->Left-3;
vol[i]->Width = 40;
if里面少了一个!,结果一运行就出错,实在是不能容忍的低级错误
{
vol[i] = new TCSpinEdit(this);
}
vol[i]->Parent = masPanel[i];
vol[i]->Value = i;
vol[i]->Left = VOL->Left-3;
vol[i]->Width = 40;
if里面少了一个!,结果一运行就出错,实在是不能容忍的低级错误
#15
解决错误首先是要让错误可以重现
我们客户反映说我们的程序会弹出一个错误对话框,然后退出!!!
我们也测试出过一次,但后来再没发现了,头痛啊,折磨了一个月,后来终于发现,原来点侧边栏的按钮会出错,而我们的习惯都是点工具栏和菜单里面的。
汗~~~~~~~~~~
我们客户反映说我们的程序会弹出一个错误对话框,然后退出!!!
我们也测试出过一次,但后来再没发现了,头痛啊,折磨了一个月,后来终于发现,原来点侧边栏的按钮会出错,而我们的习惯都是点工具栏和菜单里面的。
汗~~~~~~~~~~
#16
还有一次做SPIHOOK,一般情况下不会出错,但偶尔会出问题,机率很小!
调试的时候总也没事,我靠,这是最恼火的!!!
我把代码挨个改,挨个程序试,终于让我把错误给弄出来了!
QQ视频的时候一准出错,虽然俺不懂汇编,但还是从QQ的汇编代码里找到了出错的原因:
多线程同步的问题!
调试的时候总也没事,我靠,这是最恼火的!!!
我把代码挨个改,挨个程序试,终于让我把错误给弄出来了!
QQ视频的时候一准出错,虽然俺不懂汇编,但还是从QQ的汇编代码里找到了出错的原因:
多线程同步的问题!
#17
说起来我范的低级错误真不少……
刚刚写的那个udpmap,第一版是正确的,有个打CS的,找我说客户端连接太少,让我改改。于是我就改成了不限制,发布出去,结果一个客户端都连不上了~~
原来以前是在数据段初始化
UDPMAP g_MapClts[MAX_CLIENTS] = { 0 };
改成
UDPMAP g_lpMapClts = new UDPMAP[nMaxClients];
却没有加
memset(g_lpMapClts, 0, sizeof (UDPMA) * nMaxClients);
刚刚写的那个udpmap,第一版是正确的,有个打CS的,找我说客户端连接太少,让我改改。于是我就改成了不限制,发布出去,结果一个客户端都连不上了~~
原来以前是在数据段初始化
UDPMAP g_MapClts[MAX_CLIENTS] = { 0 };
改成
UDPMAP g_lpMapClts = new UDPMAP[nMaxClients];
却没有加
memset(g_lpMapClts, 0, sizeof (UDPMA) * nMaxClients);
#18
TreeView与数据库连接的程序,没有逐步展开树,一下把数据库读到树上了,内存开销大,速度也慢,幸亏记录数不是很多,但在配置低的机子上运转费劲了。
#19
BCB 的编译器里的 ( ) 和 { } 很象!
有次 手快打错了,
查错查了好久都不知道,
差点气晕了
有次 手快打错了,
查错查了好久都不知道,
差点气晕了
#20
老鼠真可爱:)
#21
if (iType=1) //少了一个"="
#22
UP
#23
学习
#24
确实,=与==的问题要绝对小心
#25
我的这可是绝对低级的,AdoTable用Insert插记录,然后,movelast取值,开始没错,一旦多了,嘻嘻,大家应该知道是什么结果了。后来用Append添加,嘻嘻,又犯用样的错误,我的主键用的是UUID,很郁闷,没法升序,降序排序。最后用AdoQuery,自己生成UUID,用insert into插入然后再按照自己生成UUID查询,才搞定的。
#26
我上次制作安裝程序時,刪除目錄時沒有正確,結果把整個分獲的項目和資料都刪除了。
幸好最後有recover4all來幫忙,才把數據都找回來!
幸好最後有recover4all來幫忙,才把數據都找回來!
#27
還有去年繁體化一個軟件,當時不知道繁體下也有很多好用的輸入法,也沒有仔細找一找,所有的漢字都是在簡體下寫上,轉換成繁體,然後再貼上去的。項目做完了才發現原來繁體windows下的輸入法很多,浪費了不少時間呀
#28
在C++ 中的确是有很多有小心的事情呀,尤其是指针方面
#29
我也有一次写代码写成了这样。(估计是删代码删出来的)
for(int i=1;i<j;i++);
{
...;
}
就是得不到我想要的结果。
因为当时工程很复杂,一开始调试的时候断点又没设好,当初怎么也没想到会犯这种底级错误。检查了整整一天,才查出错误来。
楼下的,你看出来偶犯的低级错误了吗?
for(int i=1;i<j;i++);
{
...;
}
就是得不到我想要的结果。
因为当时工程很复杂,一开始调试的时候断点又没设好,当初怎么也没想到会犯这种底级错误。检查了整整一天,才查出错误来。
楼下的,你看出来偶犯的低级错误了吗?
#30
for(int i=1;i<j;i++);//;
#31
坚持每天没事的多写点code,写多了,错误多了就会注意。
#32
一个项目的成功与否80%取决于项目负责人,没有好的领导与规划则离失败不远。项目文档最主要,用ISO9000的精神来做项目(把要做的写下来,按照写的去做)你的管理将越来轻松,效率将越来越高,项目进度将永远在掌握之中.
#33
做三层的时候记住中间的缓存!
#34
playmud(把复杂问题简单化) 有够聪明。
因为当初那个项目是与外设交互的,我老以为数据读出来的时候读错了。
最后,用mouse一拖滚动条,一下就发现了。那个汗呀!
再说一个,说起来还要感谢两个BCB版的网友。
一个是copy_paste,一个是invalid。
就在去年,我有个项目用到了indy的控件,当时用的是9.0013版的。具体记不清了。
后来偶新买一个硬盘,于是重装系统,跑到indy的站点down了个最新版好象是9.0014吧。
先装好BCB,再装好新版的indy。最后装好其他的控件。把偶的工程拿出来一编,OK,
一运行,地址异常。
我查了一下,发现是indy的问题。想自已纠正一下。可是一运行到indy的某个函数就报
地址异常,没办法,想再回9.0013版吧,跑到indy的站点,糊里糊涂竟然没找到9.0013
版,晕了,偶又没备份。又赶时间,只好求助copy_paste,最后invalid给了我个9.0013
偶重新一装,就发现问题了。
因为偶装好indy的9.0014之后,再装其它的控件时偷了一点懒,将偶旧硬盘的lib,include
目录覆盖到了新硬盘的相应目录。结果就造成了上述错误。
后来我上csdn给这两个网友放分,两网友坚决不受,特别是invalid一句话让偶为之倾倒。
----------------------------------------
invalid说:这对其他的csdn网友不公平。
----------------------------------------
invalid果然高手风范。
不过这件事之后,偶再也不用indy控件了,自已动手写,算是额外收获吧。
因为当初那个项目是与外设交互的,我老以为数据读出来的时候读错了。
最后,用mouse一拖滚动条,一下就发现了。那个汗呀!
再说一个,说起来还要感谢两个BCB版的网友。
一个是copy_paste,一个是invalid。
就在去年,我有个项目用到了indy的控件,当时用的是9.0013版的。具体记不清了。
后来偶新买一个硬盘,于是重装系统,跑到indy的站点down了个最新版好象是9.0014吧。
先装好BCB,再装好新版的indy。最后装好其他的控件。把偶的工程拿出来一编,OK,
一运行,地址异常。
我查了一下,发现是indy的问题。想自已纠正一下。可是一运行到indy的某个函数就报
地址异常,没办法,想再回9.0013版吧,跑到indy的站点,糊里糊涂竟然没找到9.0013
版,晕了,偶又没备份。又赶时间,只好求助copy_paste,最后invalid给了我个9.0013
偶重新一装,就发现问题了。
因为偶装好indy的9.0014之后,再装其它的控件时偷了一点懒,将偶旧硬盘的lib,include
目录覆盖到了新硬盘的相应目录。结果就造成了上述错误。
后来我上csdn给这两个网友放分,两网友坚决不受,特别是invalid一句话让偶为之倾倒。
----------------------------------------
invalid说:这对其他的csdn网友不公平。
----------------------------------------
invalid果然高手风范。
不过这件事之后,偶再也不用indy控件了,自已动手写,算是额外收获吧。
#35
invalid(空心菜) 失踪了?????
还是陪MM去了,好像很早就听说他要结婚了!~
copy_paste (木石三) ^_^, 快要成木头了,呵呵
还是陪MM去了,好像很早就听说他要结婚了!~
copy_paste (木石三) ^_^, 快要成木头了,呵呵
#36
楼主的错误真开眼界 ,不容易想到 ……
#37
invalid(空心菜) 失踪了?????
还是陪MM去了,好像很早就听说他要结婚了!~
copy_paste (木石三) ^_^, 快要成木头了,呵呵
还是陪MM去了,好像很早就听说他要结婚了!~
copy_paste (木石三) ^_^, 快要成木头了,呵呵
#38
To Warton:
确实是的,我用的紫光输入法即可
測試一把吧
确实是的,我用的紫光输入法即可
測試一把吧
#39
以前经常有跟多错误,==写成=,还有输入法转成中文的,结果标点有什么问题大家都知道,
现在基本上没有,我觉得很错小细节平时要多注意一点
现在基本上没有,我觉得很错小细节平时要多注意一点
#40
是啊,好就不见空心菜了
有本老书-MS的一个牛人写,《微软编写优质无错C语言程序秘诀》,非常经典。
值得一看
有本老书-MS的一个牛人写,《微软编写优质无错C语言程序秘诀》,非常经典。
值得一看
#41
我将BCB自动生成的主文件修改后,再添加一个FORM,WK,自己改的那些全不见了,幸亏有备份。这个错误犯了多次了。。。借问一下,能不能不让系统改掉??
#42
好贴!
前段日子忽然又弄起了Java Applet,我装的J2SDK是1.4的,编译出来的东东死都不让在IE里运行(Applet Viewer可以)。搞到我灰心了,后来终于找到答案了。如果要用Applet标签,老老实实用JDK1.3编译。如果用J2SDK1.4编译,HTML标签要写成下面的。
<OBJECT
classid = "clsid:CAFEEFAC-0014-0001-0001-ABCDEFFEDCBA"
codebase = "http://java.sun.com/products/plugin/autodl/jinstall-1_4_1_01-windows-i586.cab#Version=1,4,1,1"
WIDTH = 300 HEIGHT = 100 >
<PARAM NAME = CODE VALUE = "GetURL.class" >
<PARAM NAME = "type" VALUE = "application/x-java-applet;jpi-version=1.4.1_01">
<PARAM NAME = "scriptable" VALUE = "false">
<PARAM NAME = lbl VALUE="This is the next best thing to sliced bread! Toas
t, toast, toast, butter, jam, toast, marmite, toast.">
<PARAM NAME = speed VALUE="4">
<COMMENT>
<EMBED
type = "application/x-java-applet;jpi-version=1.4.1_01"
CODE = "GetURL.class"
WIDTH = 300
HEIGHT = 100
lbl ="This is the next best thing to sliced bread! Toas
t, toast, toast, butter, jam, toast, marmite, toast."
speed ="4"
scriptable = false
pluginspage = "http://java.sun.com/products/plugin/index.html#download">
<NOEMBED>
alt="Your browser understands the <APPLET> tag but isn't runni
ng the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
</NOEMBED>
</EMBED>
</COMMENT>
</OBJECT>
前段日子忽然又弄起了Java Applet,我装的J2SDK是1.4的,编译出来的东东死都不让在IE里运行(Applet Viewer可以)。搞到我灰心了,后来终于找到答案了。如果要用Applet标签,老老实实用JDK1.3编译。如果用J2SDK1.4编译,HTML标签要写成下面的。
<OBJECT
classid = "clsid:CAFEEFAC-0014-0001-0001-ABCDEFFEDCBA"
codebase = "http://java.sun.com/products/plugin/autodl/jinstall-1_4_1_01-windows-i586.cab#Version=1,4,1,1"
WIDTH = 300 HEIGHT = 100 >
<PARAM NAME = CODE VALUE = "GetURL.class" >
<PARAM NAME = "type" VALUE = "application/x-java-applet;jpi-version=1.4.1_01">
<PARAM NAME = "scriptable" VALUE = "false">
<PARAM NAME = lbl VALUE="This is the next best thing to sliced bread! Toas
t, toast, toast, butter, jam, toast, marmite, toast.">
<PARAM NAME = speed VALUE="4">
<COMMENT>
<EMBED
type = "application/x-java-applet;jpi-version=1.4.1_01"
CODE = "GetURL.class"
WIDTH = 300
HEIGHT = 100
lbl ="This is the next best thing to sliced bread! Toas
t, toast, toast, butter, jam, toast, marmite, toast."
speed ="4"
scriptable = false
pluginspage = "http://java.sun.com/products/plugin/index.html#download">
<NOEMBED>
alt="Your browser understands the <APPLET> tag but isn't runni
ng the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
</NOEMBED>
</EMBED>
</COMMENT>
</OBJECT>
#43
更改界面后,编译数次未见成效,于是乎删了
#44
唉,那就多了,数不胜数,还是不提了。
#45
最经典的低级错误,是将==写成=
这是人人都知道的问题,但几乎每个人都犯过这个错误.
我以前也曾笑话别人犯这个低级错误,但当有一天,我艰难地用两天时间排查了一个莫名其妙的错误之后,我就再也不会笑话别人了.
这是人人都知道的问题,但几乎每个人都犯过这个错误.
我以前也曾笑话别人犯这个低级错误,但当有一天,我艰难地用两天时间排查了一个莫名其妙的错误之后,我就再也不会笑话别人了.
#46
不说点也不好意思,其实在我的程序出现的最多最低级错误就象楼上说的,总把==写成=,并且这样的程序编译时根本就不会发现,但一用时却总出问题,这是到最应该注意的了:)
还是说点别的吧,用过QR的朋友一点知道,明明是想用Expression组件统计每个组的总值,但却发现得到的是加上一个组的累计值,难道是我们错了,没有,检查一下你的Expression组件(运行COUNT那个)的ResetAfterPrint的属性值是否为true,如果不是把他改为true,现在看一下J
还是说点别的吧,用过QR的朋友一点知道,明明是想用Expression组件统计每个组的总值,但却发现得到的是加上一个组的累计值,难道是我们错了,没有,检查一下你的Expression组件(运行COUNT那个)的ResetAfterPrint的属性值是否为true,如果不是把他改为true,现在看一下J
#47
函数命名时要很注意的,特别是“英雄所见略同”的那种。
在我的项目书中碰到了如下:
在一个作业计划单元里有一个函数UpDate,
Image->UpDate();
可是这个函数恰恰和Image的函数Update()差不多。
一个程序员测试时就是没有刷新功能,我问了函数作者,他说可能是BCB Bug,我几乎用尽了所有的调试办法,就是没有执行自定义函数UpDate的功能。
^_^,原来如此啊!
在我的项目书中碰到了如下:
在一个作业计划单元里有一个函数UpDate,
Image->UpDate();
可是这个函数恰恰和Image的函数Update()差不多。
一个程序员测试时就是没有刷新功能,我问了函数作者,他说可能是BCB Bug,我几乎用尽了所有的调试办法,就是没有执行自定义函数UpDate的功能。
^_^,原来如此啊!
#48
Iamfish提醒了我呀,上次我也遇到那樣的問題
上次做界面,動態加載圖片,也遇到圖片不刷新的問題,後來以為是98的問題(在2000下正常),反過頭用API來實現。到最後才發現,那個控件提供了一人ApplyXXX方法,就是用來刷新的。
上次做界面,動態加載圖片,也遇到圖片不刷新的問題,後來以為是98的問題(在2000下正常),反過頭用API來實現。到最後才發現,那個控件提供了一人ApplyXXX方法,就是用來刷新的。
#49
今天又范了个低级错误:
想在网上看看阿扁遭枪击的新闻,却怎么也搞不出声音,我还以为是却少插件,忙别的……
下午一MM发过来一首歌,才发现原来是音箱的电源插头松了^^
想在网上看看阿扁遭枪击的新闻,却怎么也搞不出声音,我还以为是却少插件,忙别的……
下午一MM发过来一首歌,才发现原来是音箱的电源插头松了^^
#50
我犯的低级错误是因指法和英语的问题所造成的。
比如说:
少了分号;+ ’( {}
NEW了后没有在适当的位置 DELETE
命名起的比较乱!!
不过这些错误随着本鲨调试能力的增强,已经是不在话下了,虽然还在犯错误,但很快找到它
最低级的错误是选学了C/C++ 选用了BCB的个超烂的开发工具,超不稳定! 巨不要脸的贱人!
在调试的时候看到BCB是如何执行程序的!!超搞笑!!
void __fastcall TForm::Play()
{
Char *p=NULL
Play(p);
}
象这个程序有时它会这样执行
void __fascall TForm1::Play()
{
char *p=NULL;
Play(p);
char *p=NULL;
Play(p);
}
它会打倒回再执行一遍!!
比如说:
少了分号;+ ’( {}
NEW了后没有在适当的位置 DELETE
命名起的比较乱!!
不过这些错误随着本鲨调试能力的增强,已经是不在话下了,虽然还在犯错误,但很快找到它
最低级的错误是选学了C/C++ 选用了BCB的个超烂的开发工具,超不稳定! 巨不要脸的贱人!
在调试的时候看到BCB是如何执行程序的!!超搞笑!!
void __fastcall TForm::Play()
{
Char *p=NULL
Play(p);
}
象这个程序有时它会这样执行
void __fascall TForm1::Play()
{
char *p=NULL;
Play(p);
char *p=NULL;
Play(p);
}
它会打倒回再执行一遍!!
#1
大家要踊跃一点哟
特别是 JSP 等老大最好也说一些
特别是 JSP 等老大最好也说一些
#2
有同感,作项目命名很重要,我参加的一个项目命名就很特殊,但非常容易理解。
#3
C++Builder 有生成唯一串的函数!
#4
其实我的目的不在于讨论我的错误
仅仅是想大家也说一说自己曾犯的低级错误而已
仅仅是想大家也说一说自己曾犯的低级错误而已
#5
经过了多次的思考及实验,我觉得我现在的命名规则已经非常好了,说出来跟大家分享下吧:
首先是分类:
命名分:函数名,变量名,常量,宏
而变量和常量中作用域分全局、局部、静态;类型分整型、字符型、字符串型、结构、类 等等。
如何让这些名称让人一看就知道他是函数,或是变量、变量的作用域、类型及意义呢?!
我的做法是:函数用大小混合定义 如:CommandAssay();SendPage();等命名都采用自注释命名,不怕长,但尽量避免使用缩写。
变量全局使用g(Global)表示、局部l(Local)表示、静态使用s(Static)表示。
i表示整形(Interger),c表示字符型(Char),f表示文件(File),d表示浮点数(Double,foalt)e表示枚举(Enum),s表示结构(Struct),a表示字符串(AnsiString),t表示 类(Class);
//属性
v表示 一般变量(Variable),c表示常量(Coust),a表示 数组(Array),p表示指针(Point);
例如:定义局部的文件指针可以定义为:FILE *lfp_source, *lfp_dest;
l:局部,f:文件类型,p:这个变量是指针。于是lfp_source就是源文件指针,lfp_dest是目标文件指针。
全局整形变量:int giv_scr_len;
局部字符指针:char *lcp_scr_hig;
全局结构数组:struct CELL_STRUCT gsa_cell_dis[MAXNUM];
等……
宏当然就全部用大写加下划线组成啦,这里不给例子了
首先是分类:
命名分:函数名,变量名,常量,宏
而变量和常量中作用域分全局、局部、静态;类型分整型、字符型、字符串型、结构、类 等等。
如何让这些名称让人一看就知道他是函数,或是变量、变量的作用域、类型及意义呢?!
我的做法是:函数用大小混合定义 如:CommandAssay();SendPage();等命名都采用自注释命名,不怕长,但尽量避免使用缩写。
变量全局使用g(Global)表示、局部l(Local)表示、静态使用s(Static)表示。
i表示整形(Interger),c表示字符型(Char),f表示文件(File),d表示浮点数(Double,foalt)e表示枚举(Enum),s表示结构(Struct),a表示字符串(AnsiString),t表示 类(Class);
//属性
v表示 一般变量(Variable),c表示常量(Coust),a表示 数组(Array),p表示指针(Point);
例如:定义局部的文件指针可以定义为:FILE *lfp_source, *lfp_dest;
l:局部,f:文件类型,p:这个变量是指针。于是lfp_source就是源文件指针,lfp_dest是目标文件指针。
全局整形变量:int giv_scr_len;
局部字符指针:char *lcp_scr_hig;
全局结构数组:struct CELL_STRUCT gsa_cell_dis[MAXNUM];
等……
宏当然就全部用大写加下划线组成啦,这里不给例子了
#6
我在某系统中设置一个日志表,每次操作时先查询该表有无相关记录,如果有,则修改其中某字段,否则添加一条记录。
在实验室、生产测试都没有问题。
投产半年后,客户反映系统效率下降,由每分钟1万笔降到500笔。
跟踪调查,发现该日志表已有几十万条记录,每次查询费时很长。
后询问同行才知道,别的系统只保留3个月数据,超过时间即删除(反正客户每天都在备份数据)。
后修改数据库脚本程序,自动定时清除旧数据,并优化查询语句,解决该问题。
从此获得经验:
经常查询的数据表,绝对不能太大,如果大了,要么删除,要么分表。
在实验室、生产测试都没有问题。
投产半年后,客户反映系统效率下降,由每分钟1万笔降到500笔。
跟踪调查,发现该日志表已有几十万条记录,每次查询费时很长。
后询问同行才知道,别的系统只保留3个月数据,超过时间即删除(反正客户每天都在备份数据)。
后修改数据库脚本程序,自动定时清除旧数据,并优化查询语句,解决该问题。
从此获得经验:
经常查询的数据表,绝对不能太大,如果大了,要么删除,要么分表。
#7
if(i=0) 实际为if(i==0)
最好写成if(0==i),这样写成if(0=i)就出错
最好写成if(0==i),这样写成if(0=i)就出错
#8
MyFunc(int i....)
{
for(int i=0;...)
...
}
于是就把i的值改写了,运行结果不对。找了半天才发现。
教训呀。
{
for(int i=0;...)
...
}
于是就把i的值改写了,运行结果不对。找了半天才发现。
教训呀。
#9
new了没delete,呵呵,够低级。如果内存看涨,很可能就是这个低级错误。
#10
up
#11
这个贴子应该置顶:)
1。我做的文件中的关键字索引,后来发现使用字符树是一个原则性的错误(虽然效率上可用,但始终就还是不如BTree,因为磁盘访问次数太多),即使有LRU缓冲,以及这个数据结构本身的特点,但是效率还是不高
2。3d矢量图形编辑器,被我丢到了垃圾桶,虽然能达到一定的功能,但是把所有的图元都炸开程线段是个愚蠢的处理方式。
3。五子棋,我大一的时候写的,过分依赖搜索3,4的胜局,最后却发现还有很多类似活3的期式。最后是我自己的五子棋技术提高了,这个东西我也在也没写了。
--我发现我就没做过好的东西,做完一个东西以后,过个几个月就觉得太垃圾了,很多低级和原则性的错误。
1。我做的文件中的关键字索引,后来发现使用字符树是一个原则性的错误(虽然效率上可用,但始终就还是不如BTree,因为磁盘访问次数太多),即使有LRU缓冲,以及这个数据结构本身的特点,但是效率还是不高
2。3d矢量图形编辑器,被我丢到了垃圾桶,虽然能达到一定的功能,但是把所有的图元都炸开程线段是个愚蠢的处理方式。
3。五子棋,我大一的时候写的,过分依赖搜索3,4的胜局,最后却发现还有很多类似活3的期式。最后是我自己的五子棋技术提高了,这个东西我也在也没写了。
--我发现我就没做过好的东西,做完一个东西以后,过个几个月就觉得太垃圾了,很多低级和原则性的错误。
#12
系统中的命名很重要,最好有一个详细的文档进行规范.
数据库表名称,字段名称,源程序的目录名称,源程序的文件名称,
控件名称,变量名称,函数名称等等.
如果设计好了,系统中会省很多事,否则会感觉很乱.
数据库表名称,字段名称,源程序的目录名称,源程序的文件名称,
控件名称,变量名称,函数名称等等.
如果设计好了,系统中会省很多事,否则会感觉很乱.
#13
我做的项目,在同一个项目的B一个模块里图方面引用了A模块的一个Form,后来程序经常出现非法地址访问错误,仔细检查代码没有发现问题,最后发现是这个Form include的是DataModule1.h,而这个模块应该include的是DataModule.h,但最奇怪的是我这个模块里根本就就没有DataModule1.h,编绎居然可以通过。并且可以打开该头文件(是另一个模块里的DataModule1.h,但不在同一个项目文件夹里),不知道是什么回事。
#14
if(!vol[i])
{
vol[i] = new TCSpinEdit(this);
}
vol[i]->Parent = masPanel[i];
vol[i]->Value = i;
vol[i]->Left = VOL->Left-3;
vol[i]->Width = 40;
if里面少了一个!,结果一运行就出错,实在是不能容忍的低级错误
{
vol[i] = new TCSpinEdit(this);
}
vol[i]->Parent = masPanel[i];
vol[i]->Value = i;
vol[i]->Left = VOL->Left-3;
vol[i]->Width = 40;
if里面少了一个!,结果一运行就出错,实在是不能容忍的低级错误
#15
解决错误首先是要让错误可以重现
我们客户反映说我们的程序会弹出一个错误对话框,然后退出!!!
我们也测试出过一次,但后来再没发现了,头痛啊,折磨了一个月,后来终于发现,原来点侧边栏的按钮会出错,而我们的习惯都是点工具栏和菜单里面的。
汗~~~~~~~~~~
我们客户反映说我们的程序会弹出一个错误对话框,然后退出!!!
我们也测试出过一次,但后来再没发现了,头痛啊,折磨了一个月,后来终于发现,原来点侧边栏的按钮会出错,而我们的习惯都是点工具栏和菜单里面的。
汗~~~~~~~~~~
#16
还有一次做SPIHOOK,一般情况下不会出错,但偶尔会出问题,机率很小!
调试的时候总也没事,我靠,这是最恼火的!!!
我把代码挨个改,挨个程序试,终于让我把错误给弄出来了!
QQ视频的时候一准出错,虽然俺不懂汇编,但还是从QQ的汇编代码里找到了出错的原因:
多线程同步的问题!
调试的时候总也没事,我靠,这是最恼火的!!!
我把代码挨个改,挨个程序试,终于让我把错误给弄出来了!
QQ视频的时候一准出错,虽然俺不懂汇编,但还是从QQ的汇编代码里找到了出错的原因:
多线程同步的问题!
#17
说起来我范的低级错误真不少……
刚刚写的那个udpmap,第一版是正确的,有个打CS的,找我说客户端连接太少,让我改改。于是我就改成了不限制,发布出去,结果一个客户端都连不上了~~
原来以前是在数据段初始化
UDPMAP g_MapClts[MAX_CLIENTS] = { 0 };
改成
UDPMAP g_lpMapClts = new UDPMAP[nMaxClients];
却没有加
memset(g_lpMapClts, 0, sizeof (UDPMA) * nMaxClients);
刚刚写的那个udpmap,第一版是正确的,有个打CS的,找我说客户端连接太少,让我改改。于是我就改成了不限制,发布出去,结果一个客户端都连不上了~~
原来以前是在数据段初始化
UDPMAP g_MapClts[MAX_CLIENTS] = { 0 };
改成
UDPMAP g_lpMapClts = new UDPMAP[nMaxClients];
却没有加
memset(g_lpMapClts, 0, sizeof (UDPMA) * nMaxClients);
#18
TreeView与数据库连接的程序,没有逐步展开树,一下把数据库读到树上了,内存开销大,速度也慢,幸亏记录数不是很多,但在配置低的机子上运转费劲了。
#19
BCB 的编译器里的 ( ) 和 { } 很象!
有次 手快打错了,
查错查了好久都不知道,
差点气晕了
有次 手快打错了,
查错查了好久都不知道,
差点气晕了
#20
老鼠真可爱:)
#21
if (iType=1) //少了一个"="
#22
UP
#23
学习
#24
确实,=与==的问题要绝对小心
#25
我的这可是绝对低级的,AdoTable用Insert插记录,然后,movelast取值,开始没错,一旦多了,嘻嘻,大家应该知道是什么结果了。后来用Append添加,嘻嘻,又犯用样的错误,我的主键用的是UUID,很郁闷,没法升序,降序排序。最后用AdoQuery,自己生成UUID,用insert into插入然后再按照自己生成UUID查询,才搞定的。
#26
我上次制作安裝程序時,刪除目錄時沒有正確,結果把整個分獲的項目和資料都刪除了。
幸好最後有recover4all來幫忙,才把數據都找回來!
幸好最後有recover4all來幫忙,才把數據都找回來!
#27
還有去年繁體化一個軟件,當時不知道繁體下也有很多好用的輸入法,也沒有仔細找一找,所有的漢字都是在簡體下寫上,轉換成繁體,然後再貼上去的。項目做完了才發現原來繁體windows下的輸入法很多,浪費了不少時間呀
#28
在C++ 中的确是有很多有小心的事情呀,尤其是指针方面
#29
我也有一次写代码写成了这样。(估计是删代码删出来的)
for(int i=1;i<j;i++);
{
...;
}
就是得不到我想要的结果。
因为当时工程很复杂,一开始调试的时候断点又没设好,当初怎么也没想到会犯这种底级错误。检查了整整一天,才查出错误来。
楼下的,你看出来偶犯的低级错误了吗?
for(int i=1;i<j;i++);
{
...;
}
就是得不到我想要的结果。
因为当时工程很复杂,一开始调试的时候断点又没设好,当初怎么也没想到会犯这种底级错误。检查了整整一天,才查出错误来。
楼下的,你看出来偶犯的低级错误了吗?
#30
for(int i=1;i<j;i++);//;
#31
坚持每天没事的多写点code,写多了,错误多了就会注意。
#32
一个项目的成功与否80%取决于项目负责人,没有好的领导与规划则离失败不远。项目文档最主要,用ISO9000的精神来做项目(把要做的写下来,按照写的去做)你的管理将越来轻松,效率将越来越高,项目进度将永远在掌握之中.
#33
做三层的时候记住中间的缓存!
#34
playmud(把复杂问题简单化) 有够聪明。
因为当初那个项目是与外设交互的,我老以为数据读出来的时候读错了。
最后,用mouse一拖滚动条,一下就发现了。那个汗呀!
再说一个,说起来还要感谢两个BCB版的网友。
一个是copy_paste,一个是invalid。
就在去年,我有个项目用到了indy的控件,当时用的是9.0013版的。具体记不清了。
后来偶新买一个硬盘,于是重装系统,跑到indy的站点down了个最新版好象是9.0014吧。
先装好BCB,再装好新版的indy。最后装好其他的控件。把偶的工程拿出来一编,OK,
一运行,地址异常。
我查了一下,发现是indy的问题。想自已纠正一下。可是一运行到indy的某个函数就报
地址异常,没办法,想再回9.0013版吧,跑到indy的站点,糊里糊涂竟然没找到9.0013
版,晕了,偶又没备份。又赶时间,只好求助copy_paste,最后invalid给了我个9.0013
偶重新一装,就发现问题了。
因为偶装好indy的9.0014之后,再装其它的控件时偷了一点懒,将偶旧硬盘的lib,include
目录覆盖到了新硬盘的相应目录。结果就造成了上述错误。
后来我上csdn给这两个网友放分,两网友坚决不受,特别是invalid一句话让偶为之倾倒。
----------------------------------------
invalid说:这对其他的csdn网友不公平。
----------------------------------------
invalid果然高手风范。
不过这件事之后,偶再也不用indy控件了,自已动手写,算是额外收获吧。
因为当初那个项目是与外设交互的,我老以为数据读出来的时候读错了。
最后,用mouse一拖滚动条,一下就发现了。那个汗呀!
再说一个,说起来还要感谢两个BCB版的网友。
一个是copy_paste,一个是invalid。
就在去年,我有个项目用到了indy的控件,当时用的是9.0013版的。具体记不清了。
后来偶新买一个硬盘,于是重装系统,跑到indy的站点down了个最新版好象是9.0014吧。
先装好BCB,再装好新版的indy。最后装好其他的控件。把偶的工程拿出来一编,OK,
一运行,地址异常。
我查了一下,发现是indy的问题。想自已纠正一下。可是一运行到indy的某个函数就报
地址异常,没办法,想再回9.0013版吧,跑到indy的站点,糊里糊涂竟然没找到9.0013
版,晕了,偶又没备份。又赶时间,只好求助copy_paste,最后invalid给了我个9.0013
偶重新一装,就发现问题了。
因为偶装好indy的9.0014之后,再装其它的控件时偷了一点懒,将偶旧硬盘的lib,include
目录覆盖到了新硬盘的相应目录。结果就造成了上述错误。
后来我上csdn给这两个网友放分,两网友坚决不受,特别是invalid一句话让偶为之倾倒。
----------------------------------------
invalid说:这对其他的csdn网友不公平。
----------------------------------------
invalid果然高手风范。
不过这件事之后,偶再也不用indy控件了,自已动手写,算是额外收获吧。
#35
invalid(空心菜) 失踪了?????
还是陪MM去了,好像很早就听说他要结婚了!~
copy_paste (木石三) ^_^, 快要成木头了,呵呵
还是陪MM去了,好像很早就听说他要结婚了!~
copy_paste (木石三) ^_^, 快要成木头了,呵呵
#36
楼主的错误真开眼界 ,不容易想到 ……
#37
invalid(空心菜) 失踪了?????
还是陪MM去了,好像很早就听说他要结婚了!~
copy_paste (木石三) ^_^, 快要成木头了,呵呵
还是陪MM去了,好像很早就听说他要结婚了!~
copy_paste (木石三) ^_^, 快要成木头了,呵呵
#38
To Warton:
确实是的,我用的紫光输入法即可
測試一把吧
确实是的,我用的紫光输入法即可
測試一把吧
#39
以前经常有跟多错误,==写成=,还有输入法转成中文的,结果标点有什么问题大家都知道,
现在基本上没有,我觉得很错小细节平时要多注意一点
现在基本上没有,我觉得很错小细节平时要多注意一点
#40
是啊,好就不见空心菜了
有本老书-MS的一个牛人写,《微软编写优质无错C语言程序秘诀》,非常经典。
值得一看
有本老书-MS的一个牛人写,《微软编写优质无错C语言程序秘诀》,非常经典。
值得一看
#41
我将BCB自动生成的主文件修改后,再添加一个FORM,WK,自己改的那些全不见了,幸亏有备份。这个错误犯了多次了。。。借问一下,能不能不让系统改掉??
#42
好贴!
前段日子忽然又弄起了Java Applet,我装的J2SDK是1.4的,编译出来的东东死都不让在IE里运行(Applet Viewer可以)。搞到我灰心了,后来终于找到答案了。如果要用Applet标签,老老实实用JDK1.3编译。如果用J2SDK1.4编译,HTML标签要写成下面的。
<OBJECT
classid = "clsid:CAFEEFAC-0014-0001-0001-ABCDEFFEDCBA"
codebase = "http://java.sun.com/products/plugin/autodl/jinstall-1_4_1_01-windows-i586.cab#Version=1,4,1,1"
WIDTH = 300 HEIGHT = 100 >
<PARAM NAME = CODE VALUE = "GetURL.class" >
<PARAM NAME = "type" VALUE = "application/x-java-applet;jpi-version=1.4.1_01">
<PARAM NAME = "scriptable" VALUE = "false">
<PARAM NAME = lbl VALUE="This is the next best thing to sliced bread! Toas
t, toast, toast, butter, jam, toast, marmite, toast.">
<PARAM NAME = speed VALUE="4">
<COMMENT>
<EMBED
type = "application/x-java-applet;jpi-version=1.4.1_01"
CODE = "GetURL.class"
WIDTH = 300
HEIGHT = 100
lbl ="This is the next best thing to sliced bread! Toas
t, toast, toast, butter, jam, toast, marmite, toast."
speed ="4"
scriptable = false
pluginspage = "http://java.sun.com/products/plugin/index.html#download">
<NOEMBED>
alt="Your browser understands the <APPLET> tag but isn't runni
ng the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
</NOEMBED>
</EMBED>
</COMMENT>
</OBJECT>
前段日子忽然又弄起了Java Applet,我装的J2SDK是1.4的,编译出来的东东死都不让在IE里运行(Applet Viewer可以)。搞到我灰心了,后来终于找到答案了。如果要用Applet标签,老老实实用JDK1.3编译。如果用J2SDK1.4编译,HTML标签要写成下面的。
<OBJECT
classid = "clsid:CAFEEFAC-0014-0001-0001-ABCDEFFEDCBA"
codebase = "http://java.sun.com/products/plugin/autodl/jinstall-1_4_1_01-windows-i586.cab#Version=1,4,1,1"
WIDTH = 300 HEIGHT = 100 >
<PARAM NAME = CODE VALUE = "GetURL.class" >
<PARAM NAME = "type" VALUE = "application/x-java-applet;jpi-version=1.4.1_01">
<PARAM NAME = "scriptable" VALUE = "false">
<PARAM NAME = lbl VALUE="This is the next best thing to sliced bread! Toas
t, toast, toast, butter, jam, toast, marmite, toast.">
<PARAM NAME = speed VALUE="4">
<COMMENT>
<EMBED
type = "application/x-java-applet;jpi-version=1.4.1_01"
CODE = "GetURL.class"
WIDTH = 300
HEIGHT = 100
lbl ="This is the next best thing to sliced bread! Toas
t, toast, toast, butter, jam, toast, marmite, toast."
speed ="4"
scriptable = false
pluginspage = "http://java.sun.com/products/plugin/index.html#download">
<NOEMBED>
alt="Your browser understands the <APPLET> tag but isn't runni
ng the applet, for some reason."
Your browser is completely ignoring the <APPLET> tag!
</NOEMBED>
</EMBED>
</COMMENT>
</OBJECT>
#43
更改界面后,编译数次未见成效,于是乎删了
#44
唉,那就多了,数不胜数,还是不提了。
#45
最经典的低级错误,是将==写成=
这是人人都知道的问题,但几乎每个人都犯过这个错误.
我以前也曾笑话别人犯这个低级错误,但当有一天,我艰难地用两天时间排查了一个莫名其妙的错误之后,我就再也不会笑话别人了.
这是人人都知道的问题,但几乎每个人都犯过这个错误.
我以前也曾笑话别人犯这个低级错误,但当有一天,我艰难地用两天时间排查了一个莫名其妙的错误之后,我就再也不会笑话别人了.
#46
不说点也不好意思,其实在我的程序出现的最多最低级错误就象楼上说的,总把==写成=,并且这样的程序编译时根本就不会发现,但一用时却总出问题,这是到最应该注意的了:)
还是说点别的吧,用过QR的朋友一点知道,明明是想用Expression组件统计每个组的总值,但却发现得到的是加上一个组的累计值,难道是我们错了,没有,检查一下你的Expression组件(运行COUNT那个)的ResetAfterPrint的属性值是否为true,如果不是把他改为true,现在看一下J
还是说点别的吧,用过QR的朋友一点知道,明明是想用Expression组件统计每个组的总值,但却发现得到的是加上一个组的累计值,难道是我们错了,没有,检查一下你的Expression组件(运行COUNT那个)的ResetAfterPrint的属性值是否为true,如果不是把他改为true,现在看一下J
#47
函数命名时要很注意的,特别是“英雄所见略同”的那种。
在我的项目书中碰到了如下:
在一个作业计划单元里有一个函数UpDate,
Image->UpDate();
可是这个函数恰恰和Image的函数Update()差不多。
一个程序员测试时就是没有刷新功能,我问了函数作者,他说可能是BCB Bug,我几乎用尽了所有的调试办法,就是没有执行自定义函数UpDate的功能。
^_^,原来如此啊!
在我的项目书中碰到了如下:
在一个作业计划单元里有一个函数UpDate,
Image->UpDate();
可是这个函数恰恰和Image的函数Update()差不多。
一个程序员测试时就是没有刷新功能,我问了函数作者,他说可能是BCB Bug,我几乎用尽了所有的调试办法,就是没有执行自定义函数UpDate的功能。
^_^,原来如此啊!
#48
Iamfish提醒了我呀,上次我也遇到那樣的問題
上次做界面,動態加載圖片,也遇到圖片不刷新的問題,後來以為是98的問題(在2000下正常),反過頭用API來實現。到最後才發現,那個控件提供了一人ApplyXXX方法,就是用來刷新的。
上次做界面,動態加載圖片,也遇到圖片不刷新的問題,後來以為是98的問題(在2000下正常),反過頭用API來實現。到最後才發現,那個控件提供了一人ApplyXXX方法,就是用來刷新的。
#49
今天又范了个低级错误:
想在网上看看阿扁遭枪击的新闻,却怎么也搞不出声音,我还以为是却少插件,忙别的……
下午一MM发过来一首歌,才发现原来是音箱的电源插头松了^^
想在网上看看阿扁遭枪击的新闻,却怎么也搞不出声音,我还以为是却少插件,忙别的……
下午一MM发过来一首歌,才发现原来是音箱的电源插头松了^^
#50
我犯的低级错误是因指法和英语的问题所造成的。
比如说:
少了分号;+ ’( {}
NEW了后没有在适当的位置 DELETE
命名起的比较乱!!
不过这些错误随着本鲨调试能力的增强,已经是不在话下了,虽然还在犯错误,但很快找到它
最低级的错误是选学了C/C++ 选用了BCB的个超烂的开发工具,超不稳定! 巨不要脸的贱人!
在调试的时候看到BCB是如何执行程序的!!超搞笑!!
void __fastcall TForm::Play()
{
Char *p=NULL
Play(p);
}
象这个程序有时它会这样执行
void __fascall TForm1::Play()
{
char *p=NULL;
Play(p);
char *p=NULL;
Play(p);
}
它会打倒回再执行一遍!!
比如说:
少了分号;+ ’( {}
NEW了后没有在适当的位置 DELETE
命名起的比较乱!!
不过这些错误随着本鲨调试能力的增强,已经是不在话下了,虽然还在犯错误,但很快找到它
最低级的错误是选学了C/C++ 选用了BCB的个超烂的开发工具,超不稳定! 巨不要脸的贱人!
在调试的时候看到BCB是如何执行程序的!!超搞笑!!
void __fastcall TForm::Play()
{
Char *p=NULL
Play(p);
}
象这个程序有时它会这样执行
void __fascall TForm1::Play()
{
char *p=NULL;
Play(p);
char *p=NULL;
Play(p);
}
它会打倒回再执行一遍!!