大家来总结一下自己作项目的低级错误,给后来者一个教训吧

时间:2022-09-05 11:03:11
RT
我自己先来

今天车间质量检验部返回一个很奇怪的问题
一个以前很好的产品现在软件出问题(市场检验都超过半年了)
提示的错误是什么 
Win32 错误,代码为 87
我想了很久都想象不出什么问题,刚开始以为是瑞星搞的鬼
后来用 msconfig 配置测试一下才发现是 
HP 7268 打印机的服务程序搞的鬼

该服务程序开辟了一个名为 MyShareMemName 的内存共享文件
而我从网上 Copy 的代码写出来的的名字也是 MyShareMemName 
它老是往里面写数据,把我的数据都破坏了

我实在没有想到的是 HP 这样的大公司也会使用这么简单的名字
这个可是我们小公司才会出现的问题呀

我提醒大家:
做这个程序或者控件一定要搞一些特别的名字,否则到时可是很难查的哟?

137 个解决方案

#1


大家要踊跃一点哟

特别是 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];

等……

宏当然就全部用大写加下划线组成啦,这里不给例子了
 


 

#6


我在某系统中设置一个日志表,每次操作时先查询该表有无相关记录,如果有,则修改其中某字段,否则添加一条记录。

在实验室、生产测试都没有问题。

投产半年后,客户反映系统效率下降,由每分钟1万笔降到500笔。

跟踪调查,发现该日志表已有几十万条记录,每次查询费时很长。

后询问同行才知道,别的系统只保留3个月数据,超过时间即删除(反正客户每天都在备份数据)。

后修改数据库脚本程序,自动定时清除旧数据,并优化查询语句,解决该问题。

从此获得经验:
经常查询的数据表,绝对不能太大,如果大了,要么删除,要么分表。

#7


if(i=0) 实际为if(i==0)

最好写成if(0==i),这样写成if(0=i)就出错

#8


MyFunc(int i....)
{
for(int i=0;...)
...
}
于是就把i的值改写了,运行结果不对。找了半天才发现。
教训呀。

#9


new了没delete,呵呵,够低级。如果内存看涨,很可能就是这个低级错误。

#10


up

#11


这个贴子应该置顶:)

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里面少了一个!,结果一运行就出错,实在是不能容忍的低级错误

#15


解决错误首先是要让错误可以重现

我们客户反映说我们的程序会弹出一个错误对话框,然后退出!!!
我们也测试出过一次,但后来再没发现了,头痛啊,折磨了一个月,后来终于发现,原来点侧边栏的按钮会出错,而我们的习惯都是点工具栏和菜单里面的。

汗~~~~~~~~~~

#16


还有一次做SPIHOOK,一般情况下不会出错,但偶尔会出问题,机率很小!
调试的时候总也没事,我靠,这是最恼火的!!!
我把代码挨个改,挨个程序试,终于让我把错误给弄出来了!
QQ视频的时候一准出错,虽然俺不懂汇编,但还是从QQ的汇编代码里找到了出错的原因:
多线程同步的问题!

#17


说起来我范的低级错误真不少……

刚刚写的那个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來幫忙,才把數據都找回來!

#27


還有去年繁體化一個軟件,當時不知道繁體下也有很多好用的輸入法,也沒有仔細找一找,所有的漢字都是在簡體下寫上,轉換成繁體,然後再貼上去的。項目做完了才發現原來繁體windows下的輸入法很多,浪費了不少時間呀

#28


在C++ 中的确是有很多有小心的事情呀,尤其是指针方面

#29


我也有一次写代码写成了这样。(估计是删代码删出来的)

  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控件了,自已动手写,算是额外收获吧。





#35


invalid(空心菜)   失踪了?????
还是陪MM去了,好像很早就听说他要结婚了!~

copy_paste (木石三)    ^_^,    快要成木头了,呵呵

#36



楼主的错误真开眼界 ,不容易想到 ……

#37


invalid(空心菜)   失踪了?????
还是陪MM去了,好像很早就听说他要结婚了!~

copy_paste (木石三)    ^_^,    快要成木头了,呵呵

#38


To Warton:
确实是的,我用的紫光输入法即可

測試一把吧

#39


以前经常有跟多错误,==写成=,还有输入法转成中文的,结果标点有什么问题大家都知道,
现在基本上没有,我觉得很错小细节平时要多注意一点

#40


是啊,好就不见空心菜了

有本老书-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 &lt;APPLET&gt; tag but isn't runni
ng the applet, for some reason."
            Your browser is completely ignoring the &lt;APPLET&gt; tag!
            </NOEMBED>
</EMBED>
    </COMMENT>
</OBJECT>

#43


更改界面后,编译数次未见成效,于是乎删了

#44


唉,那就多了,数不胜数,还是不提了。

#45


最经典的低级错误,是将==写成=
这是人人都知道的问题,但几乎每个人都犯过这个错误.
我以前也曾笑话别人犯这个低级错误,但当有一天,我艰难地用两天时间排查了一个莫名其妙的错误之后,我就再也不会笑话别人了.

#46


不说点也不好意思,其实在我的程序出现的最多最低级错误就象楼上说的,总把==写成=,并且这样的程序编译时根本就不会发现,但一用时却总出问题,这是到最应该注意的了:)
还是说点别的吧,用过QR的朋友一点知道,明明是想用Expression组件统计每个组的总值,但却发现得到的是加上一个组的累计值,难道是我们错了,没有,检查一下你的Expression组件(运行COUNT那个)的ResetAfterPrint的属性值是否为true,如果不是把他改为true,现在看一下J

#47


函数命名时要很注意的,特别是“英雄所见略同”的那种。
在我的项目书中碰到了如下:
  在一个作业计划单元里有一个函数UpDate,
  Image->UpDate();
  可是这个函数恰恰和Image的函数Update()差不多。
  一个程序员测试时就是没有刷新功能,我问了函数作者,他说可能是BCB Bug,我几乎用尽了所有的调试办法,就是没有执行自定义函数UpDate的功能。
  ^_^,原来如此啊!

#48


Iamfish提醒了我呀,上次我也遇到那樣的問題

上次做界面,動態加載圖片,也遇到圖片不刷新的問題,後來以為是98的問題(在2000下正常),反過頭用API來實現。到最後才發現,那個控件提供了一人ApplyXXX方法,就是用來刷新的。

#49


今天又范了个低级错误:
想在网上看看阿扁遭枪击的新闻,却怎么也搞不出声音,我还以为是却少插件,忙别的……
下午一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);
}
它会打倒回再执行一遍!! 

#1


大家要踊跃一点哟

特别是 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];

等……

宏当然就全部用大写加下划线组成啦,这里不给例子了
 


 

#6


我在某系统中设置一个日志表,每次操作时先查询该表有无相关记录,如果有,则修改其中某字段,否则添加一条记录。

在实验室、生产测试都没有问题。

投产半年后,客户反映系统效率下降,由每分钟1万笔降到500笔。

跟踪调查,发现该日志表已有几十万条记录,每次查询费时很长。

后询问同行才知道,别的系统只保留3个月数据,超过时间即删除(反正客户每天都在备份数据)。

后修改数据库脚本程序,自动定时清除旧数据,并优化查询语句,解决该问题。

从此获得经验:
经常查询的数据表,绝对不能太大,如果大了,要么删除,要么分表。

#7


if(i=0) 实际为if(i==0)

最好写成if(0==i),这样写成if(0=i)就出错

#8


MyFunc(int i....)
{
for(int i=0;...)
...
}
于是就把i的值改写了,运行结果不对。找了半天才发现。
教训呀。

#9


new了没delete,呵呵,够低级。如果内存看涨,很可能就是这个低级错误。

#10


up

#11


这个贴子应该置顶:)

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里面少了一个!,结果一运行就出错,实在是不能容忍的低级错误

#15


解决错误首先是要让错误可以重现

我们客户反映说我们的程序会弹出一个错误对话框,然后退出!!!
我们也测试出过一次,但后来再没发现了,头痛啊,折磨了一个月,后来终于发现,原来点侧边栏的按钮会出错,而我们的习惯都是点工具栏和菜单里面的。

汗~~~~~~~~~~

#16


还有一次做SPIHOOK,一般情况下不会出错,但偶尔会出问题,机率很小!
调试的时候总也没事,我靠,这是最恼火的!!!
我把代码挨个改,挨个程序试,终于让我把错误给弄出来了!
QQ视频的时候一准出错,虽然俺不懂汇编,但还是从QQ的汇编代码里找到了出错的原因:
多线程同步的问题!

#17


说起来我范的低级错误真不少……

刚刚写的那个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來幫忙,才把數據都找回來!

#27


還有去年繁體化一個軟件,當時不知道繁體下也有很多好用的輸入法,也沒有仔細找一找,所有的漢字都是在簡體下寫上,轉換成繁體,然後再貼上去的。項目做完了才發現原來繁體windows下的輸入法很多,浪費了不少時間呀

#28


在C++ 中的确是有很多有小心的事情呀,尤其是指针方面

#29


我也有一次写代码写成了这样。(估计是删代码删出来的)

  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控件了,自已动手写,算是额外收获吧。





#35


invalid(空心菜)   失踪了?????
还是陪MM去了,好像很早就听说他要结婚了!~

copy_paste (木石三)    ^_^,    快要成木头了,呵呵

#36



楼主的错误真开眼界 ,不容易想到 ……

#37


invalid(空心菜)   失踪了?????
还是陪MM去了,好像很早就听说他要结婚了!~

copy_paste (木石三)    ^_^,    快要成木头了,呵呵

#38


To Warton:
确实是的,我用的紫光输入法即可

測試一把吧

#39


以前经常有跟多错误,==写成=,还有输入法转成中文的,结果标点有什么问题大家都知道,
现在基本上没有,我觉得很错小细节平时要多注意一点

#40


是啊,好就不见空心菜了

有本老书-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 &lt;APPLET&gt; tag but isn't runni
ng the applet, for some reason."
            Your browser is completely ignoring the &lt;APPLET&gt; tag!
            </NOEMBED>
</EMBED>
    </COMMENT>
</OBJECT>

#43


更改界面后,编译数次未见成效,于是乎删了

#44


唉,那就多了,数不胜数,还是不提了。

#45


最经典的低级错误,是将==写成=
这是人人都知道的问题,但几乎每个人都犯过这个错误.
我以前也曾笑话别人犯这个低级错误,但当有一天,我艰难地用两天时间排查了一个莫名其妙的错误之后,我就再也不会笑话别人了.

#46


不说点也不好意思,其实在我的程序出现的最多最低级错误就象楼上说的,总把==写成=,并且这样的程序编译时根本就不会发现,但一用时却总出问题,这是到最应该注意的了:)
还是说点别的吧,用过QR的朋友一点知道,明明是想用Expression组件统计每个组的总值,但却发现得到的是加上一个组的累计值,难道是我们错了,没有,检查一下你的Expression组件(运行COUNT那个)的ResetAfterPrint的属性值是否为true,如果不是把他改为true,现在看一下J

#47


函数命名时要很注意的,特别是“英雄所见略同”的那种。
在我的项目书中碰到了如下:
  在一个作业计划单元里有一个函数UpDate,
  Image->UpDate();
  可是这个函数恰恰和Image的函数Update()差不多。
  一个程序员测试时就是没有刷新功能,我问了函数作者,他说可能是BCB Bug,我几乎用尽了所有的调试办法,就是没有执行自定义函数UpDate的功能。
  ^_^,原来如此啊!

#48


Iamfish提醒了我呀,上次我也遇到那樣的問題

上次做界面,動態加載圖片,也遇到圖片不刷新的問題,後來以為是98的問題(在2000下正常),反過頭用API來實現。到最後才發現,那個控件提供了一人ApplyXXX方法,就是用來刷新的。

#49


今天又范了个低级错误:
想在网上看看阿扁遭枪击的新闻,却怎么也搞不出声音,我还以为是却少插件,忙别的……
下午一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);
}
它会打倒回再执行一遍!!