vc 6.0程序报错的问题(恕我只提供部分代码)

vc 6.0程序报错的问题(恕我只提供部分代码),第1张

如果编译器报这样的错,几乎可以肯定是在程序中,数组访问越界。例如:

int main()

{

int *p=new int[5]

p[-1]=3

delete [] p

return 0

}

当执行至delete 语句时,就会d出上图那个对话框,报damage before normal block

如果程序修改成这样

int main()

{

int *p=new int[5]

p[5]=3

delete [] p

return 0

}

执行至delete语句时,则会报damage after normal block 的错误。

什么是normal block?在使用new *** 作符为指针申请内存空间时,VC编译器为该指针分配的内存空间就是normal block。这段内存空间每个字节的初始值均为 CD h 。并且把该段内存空间之前4个字节和之后4个字节

的初值赋值为FDFDFDFD h。

用VC的Memory工具可以方便地查看到这段新分配的内存空间的内容。如上面的两个程序,VC为指针p申请的内存空间地址从0x00032f48起始。用Memory查看这个地址附近的内容,就是下图显示的内容:

在用delete 释放该段内存空间时,编译器会检查该段内存之前4个字节内容和之后4个字节内容是否有被改动。如果有,则分别报damage before normal block和damage after normal block。

但是,VC编译器的这种检错功能是十分有限的,防止数组访问越界,主要靠程序员自己小心。如上面的

程序中,如果让p[-2]=3,即对内存地址0x00032F44之前的内存进行改动,编译器是检测不出这样的错误的。同理,对p[6]赋值,或者将p[5]=0xFDFDFDFD,编译器都不会报错的。

应用程序无法正常启动0xc0000142解决方法:

1、打开“运行”输入→cmd→回车

2、然后把下面这行字符复制到黑色cmd框里面去回车等待dll文件全部注册完成就关闭可以了,为防止输入错误可以复制这条指令,然后在命令提示符后击鼠标右键→粘贴→回车,耐心等待,直到屏幕滚动停止。

(下面是要运行的代码):

for

%1

in

(%windir%\system32\*.dll)

do

regsvr32.exe

/s

%1

3、完成后重新启动机器。

可能很多人在安装VC 6.0后有过点击“Compile”或者“Build”后被出现的

“Compiling... ,Error spawning cl.exe”错误提示给郁闷过。很多人的

选择是重装,实际上这个问题很多情况下是由于路径设置的问题引起的,

“CL.exe”是VC使用真正的编译器(编译程序),其路径在“VC根目录\VC98\Bin”下面,

你可以到相应的路径下找到这个应用程序。

因此问题可以按照以下方法解决:打开vc界面 点击VC“TOOLS(工具)”—>“Option(选择)”

—>“Directories(目录)”重新设置“Excutable Fils、Include Files、

Library Files、Source Files”的路径。很多情况可能就一个盘符的不同

(例如你的VC装在C,但是这些路径全部在D),改过来就OK了。

虽然是引用,但很多情况下就是这个问题


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8171058.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存