Friday, April 29, 2005
Memory allocation
Here is a code from a book:
char* cDay = " ";
char* cYear = " ";
itoa(m_Calendar1.get_Day(), cDay, 10);
When running it, it gave write access violation. Seems that the memory can't be written. So I changed it to:
char cDD[10];
char cYY[10];
char* cDay = cDD;
char* cYear = cYY;
itoa(m_Calendar1.get_Day(), cDay, 10);
Then it works fine. I don't know how this can be explained. Do you?
char* cDay = " ";
char* cYear = " ";
itoa(m_Calendar1.get_Day(), cDay, 10);
When running it, it gave write access violation. Seems that the memory can't be written. So I changed it to:
char cDD[10];
char cYY[10];
char* cDay = cDD;
char* cYear = cYY;
itoa(m_Calendar1.get_Day(), cDay, 10);
Then it works fine. I don't know how this can be explained. Do you?
Thursday, April 28, 2005
Back to C++
To initialize an object, you can't do like Java:
Employee x = new Employee();
To do this in C++, you just use:
Employee x;
And to define a class, you don't say public like you do in java:
public class Employee { ... } // not working in C/C++;
class Employee( ... ) // working in C++.
-----------------------------------------------
Variable Scope
File scope variables by default have external linkage meaning they are visible across all the files in your project.
The keyword static now prefaces the declaration of a in file1.cpp, limiting its visibility to file1.cpp
#include
using namespace std;
static int a = 1;
void someFunction();
void someFunction(){
cout<<a<<endl;
}
-------------------------------------------------
How to delete an array of pointers?
int *int_pointers[3] = {NULL};
for(int i = 0; i<3; i++)
delete int_pointers[i];
I don't know if there is some other way.
-------------------------------------------------
Pointer to a pointer is a pointer to an array, right?
int** int_pointer_array;
for(int i = 0; i<3; i++)
int_pointer_array[i] = new int(i+1);
for(int i = 0; i<3; i++)
cout<<*int_pointer_array[i]<<endl;
for(int i = 0; i<3; i++)
delete int_pointer_array[i]; //release memory for each object
delete[] int_pointer_array; //then release the array
Another way:
int array_size = 0;
int* int_array = NULL;
cout<<"Please enter array size: ";
cin>>array_size;
int_array = new int[array_size];
for(int i=0; i<array_size; i++)
int_array[i] = i+1;
for(int i=0; i<array_size; i++)
cout<<int_array[i]<<endl;
delete[] int_array; //release the array when done
----------------------------------------------------
Static Function Variables
The local function variables are created and destroyed with each invocation of their associated function. If you want a local variable to retain its value between function calls you must declare the variable as being static using the static keyword.
A static local function variable will be initialized when the function is first called. Any change to the value of a static variable will be preserved for use by the next invocation of the function.
#include "testfunctiontwo.h"
#include
using namespace std;
void testFunctionTwo(){
static int i = 0;
int j = 0;
cout<<"Local Static i = "<<i++<<endl;
cout<<"Local Auto j = "<<j++<<endl;
}
---------------------------------------------------------------
Local variable and global variable:
int i = 25;
void testFunction(int i){
cout << "Local i " << i << endl;
cout << "Global i " << ::i << enl;
}
Employee x = new Employee();
To do this in C++, you just use:
Employee x;
And to define a class, you don't say public like you do in java:
public class Employee { ... } // not working in C/C++;
class Employee( ... ) // working in C++.
-----------------------------------------------
Variable Scope
File scope variables by default have external linkage meaning they are visible across all the files in your project.
The keyword static now prefaces the declaration of a in file1.cpp, limiting its visibility to file1.cpp
#include
using namespace std;
static int a = 1;
void someFunction();
void someFunction(){
cout<<a<<endl;
}
-------------------------------------------------
How to delete an array of pointers?
int *int_pointers[3] = {NULL};
for(int i = 0; i<3; i++)
delete int_pointers[i];
I don't know if there is some other way.
-------------------------------------------------
Pointer to a pointer is a pointer to an array, right?
int** int_pointer_array;
for(int i = 0; i<3; i++)
int_pointer_array[i] = new int(i+1);
for(int i = 0; i<3; i++)
cout<<*int_pointer_array[i]<<endl;
for(int i = 0; i<3; i++)
delete int_pointer_array[i]; //release memory for each object
delete[] int_pointer_array; //then release the array
Another way:
int array_size = 0;
int* int_array = NULL;
cout<<"Please enter array size: ";
cin>>array_size;
int_array = new int[array_size];
for(int i=0; i<array_size; i++)
int_array[i] = i+1;
for(int i=0; i<array_size; i++)
cout<<int_array[i]<<endl;
delete[] int_array; //release the array when done
----------------------------------------------------
Static Function Variables
The local function variables are created and destroyed with each invocation of their associated function. If you want a local variable to retain its value between function calls you must declare the variable as being static using the static keyword.
A static local function variable will be initialized when the function is first called. Any change to the value of a static variable will be preserved for use by the next invocation of the function.
#include "testfunctiontwo.h"
#include
using namespace std;
void testFunctionTwo(){
static int i = 0;
int j = 0;
cout<<"Local Static i = "<<i++<<endl;
cout<<"Local Auto j = "<<j++<<endl;
}
---------------------------------------------------------------
Local variable and global variable:
int i = 25;
void testFunction(int i){
cout << "Local i " << i << endl;
cout << "Global i " << ::i << enl;
}
Tuesday, April 19, 2005
Default Parameter
The default parameter in a function definition can only appear once, like this.
void foo(int p1, int p2 = 3);
void foo(int p1, int p2){
p1 = p2 + p1 + 10;
return;
}
You can't do this:
void foo(int p1, int p2 = 3);
...
void foo(int p1, int p2 = 3){
p1 = p2 + p1 + 10;
return;
}
void foo(int p1, int p2 = 3);
void foo(int p1, int p2){
p1 = p2 + p1 + 10;
return;
}
You can't do this:
void foo(int p1, int p2 = 3);
...
void foo(int p1, int p2 = 3){
p1 = p2 + p1 + 10;
return;
}
Call by Value vs Call by Reference
Seems the only difference is the method declaration:
func(int a, int b, int c)
func(int &a, int &b, int &c)
In both cases, the calling would be the same:
func(a, b, c);
Here is the code:
#include
using namespace std;
void func1(int a, int b);
void func2(int &a, int &b);
void func3(int *a, int *b);
void main(){
int a = 5;
int b = 10;
func1(a, b);
cout << "After func1: " << a << " " << b << endl;
func2(a, b);
cout << "After func2: " << a << " " << b << endl;
func3(&a, &b);
cout << "After func3: " << a << " " << b << endl;
}
void func1(int a, int b){
a = 3;
b = 6;
return;
}
void func2(int &a, int &b){
a = 3;
b = 6;
return;
}
void func3(int *a, int *b){
*a = 4;
*b = 8;
return;
}
In a sense, if you it's a pointer, you have to pass a pointer in; if it's call by value or call by reference, you just need to pass the variable in. The program knows the rest.
func(int a, int b, int c)
func(int &a, int &b, int &c)
In both cases, the calling would be the same:
func(a, b, c);
Here is the code:
#include
using namespace std;
void func1(int a, int b);
void func2(int &a, int &b);
void func3(int *a, int *b);
void main(){
int a = 5;
int b = 10;
func1(a, b);
cout << "After func1: " << a << " " << b << endl;
func2(a, b);
cout << "After func2: " << a << " " << b << endl;
func3(&a, &b);
cout << "After func3: " << a << " " << b << endl;
}
void func1(int a, int b){
a = 3;
b = 6;
return;
}
void func2(int &a, int &b){
a = 3;
b = 6;
return;
}
void func3(int *a, int *b){
*a = 4;
*b = 8;
return;
}
In a sense, if you it's a pointer, you have to pass a pointer in; if it's call by value or call by reference, you just need to pass the variable in. The program knows the rest.
Monday, April 18, 2005
Enumeration
enum MonthsOfYear {January , February, March,
April, May, June, July, August,
September, October, November, December};
If you do this, the January will be 0, ..., Dec be 11
enum MonthsOfYear {January = 1, February, March,
April, May, June, July, August,
September, October, November, December};
Then January is 1 and December will be 12.
April, May, June, July, August,
September, October, November, December};
If you do this, the January will be 0, ..., Dec be 11
enum MonthsOfYear {January = 1, February, March,
April, May, June, July, August,
September, October, November, December};
Then January is 1 and December will be 12.
Monday, April 11, 2005
Linking
To link to other object file you created:
gcc -L/usr/lib -lnsl -I/usr/include -o runthis runthis.o firstlib.o secondlib.o
This should work
gcc -L/usr/lib -lnsl -I/usr/include -o runthis runthis.o firstlib.o secondlib.o
This should work
Compiling issue again
Tried to run
gcc -I/usr/include -lsocket send_smtp.c
and got
Undefined first referenced
symbol in file
gethostbyname /var/tmp/ccaFFX2O.o (symbol belongs to implicit dependency /usr/lib/libnsl.so.1)
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status
Went into /usr/lib and issued:
nm * | grep gethost | grep -v "UNDEF"
Here is the partial returns:
[399] | 303636| 12|FUNC |LOCL |0 |12 |Xegethostname
[2371] | 328548| 340|FUNC |LOCL |0 |12 |my_gethost
libc.a[gethostid.o]:
[5] | 0| 80|FUNC |GLOB |0 |2 |gethostid
[1] | 0| 0|FILE |LOCL |0 |ABS |gethostid.c
libc.a[gethostname.o]:
[5] | 0| 44|FUNC |GLOB |0 |2 |gethostname
[1] | 0| 0|FILE |LOCL |0 |ABS |gethostname.c
[3459] | 247796| 80|FUNC |GLOB |0 |9 |gethostid
[996] | 0| 0|FILE |LOCL |0 |ABS |gethostid.c
[4204] | 247876| 44|FUNC |GLOB |0 |9 |gethostname
[997] | 0| 0|FILE |LOCL |0 |ABS |gethostname.c
....
libnsl.a[gethostbyname_r.o]:
[11] | 200| 184|FUNC |GLOB |0 |2 |gethostbyaddr_r
[6] | 0| 200|FUNC |GLOB |0 |2 |gethostbyname_r
[1] | 0| 0|FILE |LOCL |0 |ABS |gethostbyname_r.c
libnsl.a[gethostent.o]:
[11] | 84| 132|FUNC |GLOB |0 |2 |gethostbyaddr
[8] | 0| 84|FUNC |GLOB |0 |2 |gethostbyname
[14] | 216| 84|FUNC |GLOB |0 |2 |gethostent
Now you see that gethostname is in the libc.a
gcc -I/usr/include -lsocket -lc send_smtp.c
but it did not work. Look through the above output, you can see that gethostname is in libnsl.a as well.
gcc -I/usr/include -lsocket -lnsl send_smtp.c
Then it worked.
Tip: nm command.
gcc -I/usr/include -lsocket send_smtp.c
and got
Undefined first referenced
symbol in file
gethostbyname /var/tmp/ccaFFX2O.o (symbol belongs to implicit dependency /usr/lib/libnsl.so.1)
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status
Went into /usr/lib and issued:
nm * | grep gethost | grep -v "UNDEF"
Here is the partial returns:
[399] | 303636| 12|FUNC |LOCL |0 |12 |Xegethostname
[2371] | 328548| 340|FUNC |LOCL |0 |12 |my_gethost
libc.a[gethostid.o]:
[5] | 0| 80|FUNC |GLOB |0 |2 |gethostid
[1] | 0| 0|FILE |LOCL |0 |ABS |gethostid.c
libc.a[gethostname.o]:
[5] | 0| 44|FUNC |GLOB |0 |2 |gethostname
[1] | 0| 0|FILE |LOCL |0 |ABS |gethostname.c
[3459] | 247796| 80|FUNC |GLOB |0 |9 |gethostid
[996] | 0| 0|FILE |LOCL |0 |ABS |gethostid.c
[4204] | 247876| 44|FUNC |GLOB |0 |9 |gethostname
[997] | 0| 0|FILE |LOCL |0 |ABS |gethostname.c
....
libnsl.a[gethostbyname_r.o]:
[11] | 200| 184|FUNC |GLOB |0 |2 |gethostbyaddr_r
[6] | 0| 200|FUNC |GLOB |0 |2 |gethostbyname_r
[1] | 0| 0|FILE |LOCL |0 |ABS |gethostbyname_r.c
libnsl.a[gethostent.o]:
[11] | 84| 132|FUNC |GLOB |0 |2 |gethostbyaddr
[8] | 0| 84|FUNC |GLOB |0 |2 |gethostbyname
[14] | 216| 84|FUNC |GLOB |0 |2 |gethostent
Now you see that gethostname is in the libc.a
gcc -I/usr/include -lsocket -lc send_smtp.c
but it did not work. Look through the above output, you can see that gethostname is in libnsl.a as well.
gcc -I/usr/include -lsocket -lnsl send_smtp.c
Then it worked.
Tip: nm command.
Thursday, April 07, 2005
Undefined Symbol
I was trying to compile a C++ program:
gcc a.cpp
Got this:
Undefined first referenced
symbol in file
cerr /var/tmp/ccKpgRuk.o
cout /var/tmp/ccKpgRuk.o
string_char_traits::move(char *, char const *, unsigned int)/var/tmp/ccKpgRuk.o
endl(ostream &) /var/tmp/ccKpgRuk.o
__out_of_range(char const *) /var/tmp/ccKpgRuk.o
ostream::operator<<(ostream &(*)(ostream &))/var/tmp/ccKpgRuk.o
ostream::write(char const *, int) /var/tmp/ccKpgRuk.o
string_char_traits::length(char const *)/var/tmp/ccKpgRuk.o
__length_error(char const *) /var/tmp/ccKpgRuk.o
string_char_traits::copy(char *, char const *, unsigned int)/var/tmp/ccKpgRuk.o
ostream::operator<<(char const *) /var/tmp/ccKpgRuk.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status
This is caused by not linking to the C++ library,
gcc -lstdc++ a.cpp
would fix it.
gcc a.cpp
Got this:
Undefined first referenced
symbol in file
cerr /var/tmp/ccKpgRuk.o
cout /var/tmp/ccKpgRuk.o
string_char_traits
endl(ostream &) /var/tmp/ccKpgRuk.o
__out_of_range(char const *) /var/tmp/ccKpgRuk.o
ostream::operator<<(ostream &(*)(ostream &))/var/tmp/ccKpgRuk.o
ostream::write(char const *, int) /var/tmp/ccKpgRuk.o
string_char_traits
__length_error(char const *) /var/tmp/ccKpgRuk.o
string_char_traits
ostream::operator<<(char const *) /var/tmp/ccKpgRuk.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status
This is caused by not linking to the C++ library,
gcc -lstdc++ a.cpp
would fix it.
Tuesday, April 05, 2005
Compiling CPP with CL
I have three files, bstream.h, bstream.cpp and test8.cpp. Basically test8 uses the other two files. Here is the steps to compile:
cl -c bstream.cpp
This will create the bstrea.obj file
cl test8.cpp bstream.obj
This will compile and create a test8.exe file
cl -c bstream.cpp
This will create the bstrea.obj file
cl test8.cpp bstream.obj
This will compile and create a test8.exe file
办公室里的麦肯切尔健身法
伸懒腰:可以坐在椅子上,四肢尽可能伸展开来,挺胸,抬头,并相应地配合吸气和呼气。可以放松本来紧张的肌肉,同时收缩本来舒张的肌肉,促进血液循环。
俯卧撑:双手支撑于桌边,两腿并拢伸直,整个身体与桌面形成一个斜角(根据自己的力量来掌握身体与桌面的倾斜角度);然后,双臂屈肘使身体下降,全身的重量压在双臂上,再用两臂的力量把身体撑起。可以锻炼上肢肌肉,预防上肢肌肉疲劳。
插手转腕:将双手手指交叉在一起,然后掌心向下或向前,做几次伸展运动。再绕腕关节做旋转运动。结束后做几个搓手动作。可以锻炼手指和腕部肌肉。
摇头晃脑:先做几个低头和抬头的动作,再做几个左右转动的动作。工作姿势下颈部肌肉多处于静力状态。摇头晃脑可以交替收缩和放松颈部肌肉。
俯卧撑:双手支撑于桌边,两腿并拢伸直,整个身体与桌面形成一个斜角(根据自己的力量来掌握身体与桌面的倾斜角度);然后,双臂屈肘使身体下降,全身的重量压在双臂上,再用两臂的力量把身体撑起。可以锻炼上肢肌肉,预防上肢肌肉疲劳。
插手转腕:将双手手指交叉在一起,然后掌心向下或向前,做几次伸展运动。再绕腕关节做旋转运动。结束后做几个搓手动作。可以锻炼手指和腕部肌肉。
摇头晃脑:先做几个低头和抬头的动作,再做几个左右转动的动作。工作姿势下颈部肌肉多处于静力状态。摇头晃脑可以交替收缩和放松颈部肌肉。
Monday, April 04, 2005
Windows操作系统非法操作的详解
文字一般的“非法操作”有两个选项:“关闭”和“详细资料”。可是“详细资料”里面的内容大多数人都看不明白,只好草草的关闭了。现在不用怕了,我来给大家讲解一下非法作的每个详细资料的具体含义。
1、停止错误编号:0x0000000A
说明文字:IRQL-NOT-LESS-OR-EQUAL
通常的原因:驱动程序使用了不正确的内存地址。
解决方法:如果无法登陆,则重新启动计算机。当出现可用的作系统列表时,按F8键。在Windows高级选项菜单屏幕上,选择"最后一次正确的配置",然后按回车键。
检查是否正确安装了所有的新硬件或软件。如果这是一次全新安装,请与硬件或软件的制造商联系,获得可能需要的任何Windows更新或驱动程序。
运行由计算机制造商提供的所有的系统诊断软件,尤其是内存检查。
禁用或卸掉新近安装的硬件(RAM,适配器,硬盘,调制解调器等等),驱动程序或软件。
确保硬件设备驱动程序和系统BIOS都是最新的版本。
确保制造商可帮助你是否具有最新版本,也可帮助你获得这些硬件。
禁用 BIOS内存选项,例如cache或shadow。
2、停止错误编号:0x0000001E
说明文字:KMODE-EXPTION-NOT-HANDLED
通常的原因:内核模式进程试图执行一个非法或未知的处理器指令。
解决方法:确保有足够的空间,尤其是在执行一次新安装的时候。
如果停止错误消息指出了某个特定的驱动程序,那么禁用他。如果无法启动计算机。应试着用安全模式启动,以便删除或禁用该驱动程序。
如果有非 Microsoft支持的视频驱动程序,尽量切换到标准的VGA驱动程序或Windows提供的适当驱动程序。
禁用所有新近安装的驱动程序。
确保有最新版本的系统BIOS。硬件制造商可帮助确定你是否具有最新版本,也可以帮助你获得他BIOS内存选项,例如cache,shadow。
说明文字:FAT-FILE-SYSTEM或MTFS-FILE-SYSTEM
通常原因:问题出现在Ntfs.sys(允许系统读写NTFS驱动器的驱动程序文件)内。
解决方法:运行由计算机制造商提供的系统诊断软件,尤其是硬件诊断软件。
禁用或卸载所有的反病毒软件,磁盘碎片整理程序或备份程序。
通过在命令提示符下运行Chkdsk /f命令检查硬盘驱动器是否损坏,然后重新启动计算机
4、停止编号:0x0000002E
说明文字:ATA-BUS-ERROR
通常的原因:系统内存奇偶校验出错,通常由硬件问题导致。
解决方法:卸掉所有新近安装的硬件(RAM。适配器。硬盘。调制解调器等等)。
运行由计算机制造商提供的系统诊断软件,尤其是硬件诊断软件。
确保硬件设备驱动程序和系统BIOS都是最新版本。
使用硬件供应商提供的系统诊断,运行内存检查来查找故障或不匹配的内存。
禁用BIOS内存选项,例如cache或shadow。
在启动后出现可用作系统列表时,按F8。在Windows高级选项菜单屏幕上,选择"启动VGA模式。然后按回车键。如果这样做还不能解决问题,可能需要更换不同的视频适配器列表,有关支持的视频适配器列表,请参阅硬件兼容性列表。
5、停止编号:0x0000003F
说明文字:NO-MOR-SYSTEM-PTES
通常的原因:没有正确清理驱动程序。
解决方法:禁用或卸载所有的反病毒软件,磁盘碎片处理程序或备份程序。
说明文字:FTDISK-INTERN-ERROR
通常的原因:容错集内的某个主驱动器发生故障。
解决方法:使用Windows安装盘启动计算机,从镜象(第2)系统驱动器引导。有关如何编辑Boot.ini文件以指向镜象系统驱动器的指导,可在MIcrosoft支持服务Web站点搜索"Edit ARC path"。
7、停止错误编号:0x0000007B
说明文字:INACCESSI-BLE-BOOT-DEVICE
通常原因:初始化I/O系统(通常是指引导设备或文件系统)失败。
解决方法:引导扇区病毒通常会导致这种停止错误。是用反病毒软件的最新版本,检查计算机上是否有存在病毒。如果找到病毒,则必须执行必要的不找把他从计算机上清除掉,请参阅反病毒软件文档了解如何执行这些步骤。
卸下所有新近安装的硬件(RAM,适配器,调制解调器等等)。
核对MIcrosoft硬件兼容性列表以确保所有的硬件和驱动程序都与Windows兼容。
如果使用的适SCSI适配器,可以从硬件供应商除获得最新WINDOWS驱动程序,禁用SCSI设备的同步协商,检查该SCSI链是否终结,并核对这些设备的SCSI ID,如果无法确定如何执行能够这些步骤,可参考硬件设备的文档。
如果你用的是IDE设备,将板上的IDE端口定义为唯一的主端口。核对IDE设备的主/从/唯一设置。卸掉除硬盘之外的所有IDE设备。如果无法确认如何执行这些不找,可参考硬件文档。
如果计算机已使用NTFS文件系统格式化,可重新启动计算机,然后在该系统分区上运行Chkdsk /f/r命令。如果由于错误而无法启动系统,那么使用命令控制台,并运行Chkdsk /r命令。
运行Chkdsk /f命令以确定文件系统是否损坏。如果Windows不能运行Chkdsk命令,将驱动器移动到其他运行Windows的计算机上,然后从这台计算机上对该驱动器运行Chkdsk命令
说明文字:UNEXPECTED-KERNEL-MODE-TRAP
通常的原因:通常是由于硬件或软件问题导致,但一般都由硬件故障引起的。
解决方法:核对Microsoft硬件兼容性列表以确保所有的硬件和驱动程序都与Windows兼容。如果计算机主板不兼容就会产生这个问题。
卸掉所由新近安装的硬件。
运行由计算机制造商提供的所有系统诊断软件,尤其是内存检查。
禁用BIOS内存选项,例如cache或shadow。
9、停止错误编号:0x00000050
说明文字:AGE-FAULT-IN-NONPAGED-AREA
通常的原因:内存错误(数据不能使用分页文件交换到磁盘中)。
解决方法:卸掉所有的新近安装的硬件。
运行由计算机制造商提供的所有系统诊断软件。尤其是内存检查。
检查是否正确安装了所有新硬件或软件,如果这是一次全新安装,请与硬件或软件制造商联系,获得可能需要的任何Windows更新或驱动程序。
禁用或卸载所有的反病毒程序。
禁用BIOS内存选项,例如cache或shadow
10、停止错误编号:0x0000007
说明文字:KERNEL-STEL-STACK-INPAGE-ERROR
通常的原因:无法从分页文件将内核数据所需的页面读取到内存中。
解决方法:使用反病毒软件的最新版本,检查计算机上是否有病毒。如果找到病毒,则执行必要的步骤把他从计算机上清除掉。请参阅制造商提供的所有系统诊断软件,尤其是内存检查。
禁用BIOS内存选项,例如cache,shadow。
说明文字:MISMATCHED-HAL
通常的原因:硬件抽象层与内核或机器类型不匹配(通常发生在单处理器和多处理器配置文件混合在同一系统的情况下)。
解决方法:要解决本错误,可使用命令控制台替换计算机上错误的系统文件。
单处理器系统的内核文件是Ntoskml.exe,而多处理器系统的内核文件是Ntkrnlmp.exe,但是,这些文件要与安装媒体上的文件相对应;在安装完Windows2000和,不论使用的是哪个原文件,都会被重命名为Ntoskrnl.exe文件。HAL文件在安装之后也使用名称 Hal.dll但是在安装媒体,但是在安装媒体上却有若干个可能的HAL文件。
12、停止错误编号:0x0000007A
说明文字:KERNEL-DATA-INPAGE-ERROR
通常的原因:无法从分页文件将内核数据所需的页面读取到内存中。(通常是由于分页文件上的故障,病毒,磁盘控制器错误或由故障的RAM引起的)。
解决方法:使用反病毒软件的最新版本,检查计算机上是否存在病毒。如果找到病毒。则执行必要的步骤把他从计算机上清除掉,请参阅犯病度软件文档了解如何执行这些步骤。
如果计算机已使用NTFS文件系统格式化。可重新启动计算机,然后在该系统分区上运行Chkdsk /f/r命令。如果由于错误而无法启动命令,那么使用命令控制台,并运行Chkdsk /r命令。
运行由计算机制造商提供的所有的系统在很端软件,尤其是内存检查。
13、停止错误编号:0xC000021A
说明文字:STATUS-SYSTEM-PROCESS-TERMINATED
通常的原因:用户模式子系统,例如Winlogon或客户服务器运行时子系统(CSRSS)已被损坏,所以无法再保证安全性。
解决方法:卸掉所有新近安装的硬件。
如果无法登陆,则重新启动计算机。当出现可用的作系统列表时按F8。在Windows 2000高级选项菜单屏幕上,选择:“最后一次正确的配置”。然后按会车。
运行故障恢复台,并允许系统修复任何检测到的错误。
14、停止错误编号:0xC0000221
说明文字:STATUS-IMAGE-CHECKISU7M-MISMATCH
通常的原因:驱动程序或系统DLL已经被损坏。
解决方法:运行故障复控台,并且允许系统修复任何检测到的错误。
如果在RAM添加到计算机之后,立即发生错误,那么可能是分页文件损坏,或者新RAM由故障或不兼容。删除Pagefile.sys并将系统返回到原来的RAM配置。
1、停止错误编号:0x0000000A
说明文字:IRQL-NOT-LESS-OR-EQUAL
通常的原因:驱动程序使用了不正确的内存地址。
解决方法:如果无法登陆,则重新启动计算机。当出现可用的作系统列表时,按F8键。在Windows高级选项菜单屏幕上,选择"最后一次正确的配置",然后按回车键。
检查是否正确安装了所有的新硬件或软件。如果这是一次全新安装,请与硬件或软件的制造商联系,获得可能需要的任何Windows更新或驱动程序。
运行由计算机制造商提供的所有的系统诊断软件,尤其是内存检查。
禁用或卸掉新近安装的硬件(RAM,适配器,硬盘,调制解调器等等),驱动程序或软件。
确保硬件设备驱动程序和系统BIOS都是最新的版本。
确保制造商可帮助你是否具有最新版本,也可帮助你获得这些硬件。
禁用 BIOS内存选项,例如cache或shadow。
2、停止错误编号:0x0000001E
说明文字:KMODE-EXPTION-NOT-HANDLED
通常的原因:内核模式进程试图执行一个非法或未知的处理器指令。
解决方法:确保有足够的空间,尤其是在执行一次新安装的时候。
如果停止错误消息指出了某个特定的驱动程序,那么禁用他。如果无法启动计算机。应试着用安全模式启动,以便删除或禁用该驱动程序。
如果有非 Microsoft支持的视频驱动程序,尽量切换到标准的VGA驱动程序或Windows提供的适当驱动程序。
禁用所有新近安装的驱动程序。
确保有最新版本的系统BIOS。硬件制造商可帮助确定你是否具有最新版本,也可以帮助你获得他BIOS内存选项,例如cache,shadow。
说明文字:FAT-FILE-SYSTEM或MTFS-FILE-SYSTEM
通常原因:问题出现在Ntfs.sys(允许系统读写NTFS驱动器的驱动程序文件)内。
解决方法:运行由计算机制造商提供的系统诊断软件,尤其是硬件诊断软件。
禁用或卸载所有的反病毒软件,磁盘碎片整理程序或备份程序。
通过在命令提示符下运行Chkdsk /f命令检查硬盘驱动器是否损坏,然后重新启动计算机
4、停止编号:0x0000002E
说明文字:ATA-BUS-ERROR
通常的原因:系统内存奇偶校验出错,通常由硬件问题导致。
解决方法:卸掉所有新近安装的硬件(RAM。适配器。硬盘。调制解调器等等)。
运行由计算机制造商提供的系统诊断软件,尤其是硬件诊断软件。
确保硬件设备驱动程序和系统BIOS都是最新版本。
使用硬件供应商提供的系统诊断,运行内存检查来查找故障或不匹配的内存。
禁用BIOS内存选项,例如cache或shadow。
在启动后出现可用作系统列表时,按F8。在Windows高级选项菜单屏幕上,选择"启动VGA模式。然后按回车键。如果这样做还不能解决问题,可能需要更换不同的视频适配器列表,有关支持的视频适配器列表,请参阅硬件兼容性列表。
5、停止编号:0x0000003F
说明文字:NO-MOR-SYSTEM-PTES
通常的原因:没有正确清理驱动程序。
解决方法:禁用或卸载所有的反病毒软件,磁盘碎片处理程序或备份程序。
说明文字:FTDISK-INTERN-ERROR
通常的原因:容错集内的某个主驱动器发生故障。
解决方法:使用Windows安装盘启动计算机,从镜象(第2)系统驱动器引导。有关如何编辑Boot.ini文件以指向镜象系统驱动器的指导,可在MIcrosoft支持服务Web站点搜索"Edit ARC path"。
7、停止错误编号:0x0000007B
说明文字:INACCESSI-BLE-BOOT-DEVICE
通常原因:初始化I/O系统(通常是指引导设备或文件系统)失败。
解决方法:引导扇区病毒通常会导致这种停止错误。是用反病毒软件的最新版本,检查计算机上是否有存在病毒。如果找到病毒,则必须执行必要的不找把他从计算机上清除掉,请参阅反病毒软件文档了解如何执行这些步骤。
卸下所有新近安装的硬件(RAM,适配器,调制解调器等等)。
核对MIcrosoft硬件兼容性列表以确保所有的硬件和驱动程序都与Windows兼容。
如果使用的适SCSI适配器,可以从硬件供应商除获得最新WINDOWS驱动程序,禁用SCSI设备的同步协商,检查该SCSI链是否终结,并核对这些设备的SCSI ID,如果无法确定如何执行能够这些步骤,可参考硬件设备的文档。
如果你用的是IDE设备,将板上的IDE端口定义为唯一的主端口。核对IDE设备的主/从/唯一设置。卸掉除硬盘之外的所有IDE设备。如果无法确认如何执行这些不找,可参考硬件文档。
如果计算机已使用NTFS文件系统格式化,可重新启动计算机,然后在该系统分区上运行Chkdsk /f/r命令。如果由于错误而无法启动系统,那么使用命令控制台,并运行Chkdsk /r命令。
运行Chkdsk /f命令以确定文件系统是否损坏。如果Windows不能运行Chkdsk命令,将驱动器移动到其他运行Windows的计算机上,然后从这台计算机上对该驱动器运行Chkdsk命令
说明文字:UNEXPECTED-KERNEL-MODE-TRAP
通常的原因:通常是由于硬件或软件问题导致,但一般都由硬件故障引起的。
解决方法:核对Microsoft硬件兼容性列表以确保所有的硬件和驱动程序都与Windows兼容。如果计算机主板不兼容就会产生这个问题。
卸掉所由新近安装的硬件。
运行由计算机制造商提供的所有系统诊断软件,尤其是内存检查。
禁用BIOS内存选项,例如cache或shadow。
9、停止错误编号:0x00000050
说明文字:AGE-FAULT-IN-NONPAGED-AREA
通常的原因:内存错误(数据不能使用分页文件交换到磁盘中)。
解决方法:卸掉所有的新近安装的硬件。
运行由计算机制造商提供的所有系统诊断软件。尤其是内存检查。
检查是否正确安装了所有新硬件或软件,如果这是一次全新安装,请与硬件或软件制造商联系,获得可能需要的任何Windows更新或驱动程序。
禁用或卸载所有的反病毒程序。
禁用BIOS内存选项,例如cache或shadow
10、停止错误编号:0x0000007
说明文字:KERNEL-STEL-STACK-INPAGE-ERROR
通常的原因:无法从分页文件将内核数据所需的页面读取到内存中。
解决方法:使用反病毒软件的最新版本,检查计算机上是否有病毒。如果找到病毒,则执行必要的步骤把他从计算机上清除掉。请参阅制造商提供的所有系统诊断软件,尤其是内存检查。
禁用BIOS内存选项,例如cache,shadow。
说明文字:MISMATCHED-HAL
通常的原因:硬件抽象层与内核或机器类型不匹配(通常发生在单处理器和多处理器配置文件混合在同一系统的情况下)。
解决方法:要解决本错误,可使用命令控制台替换计算机上错误的系统文件。
单处理器系统的内核文件是Ntoskml.exe,而多处理器系统的内核文件是Ntkrnlmp.exe,但是,这些文件要与安装媒体上的文件相对应;在安装完Windows2000和,不论使用的是哪个原文件,都会被重命名为Ntoskrnl.exe文件。HAL文件在安装之后也使用名称 Hal.dll但是在安装媒体,但是在安装媒体上却有若干个可能的HAL文件。
12、停止错误编号:0x0000007A
说明文字:KERNEL-DATA-INPAGE-ERROR
通常的原因:无法从分页文件将内核数据所需的页面读取到内存中。(通常是由于分页文件上的故障,病毒,磁盘控制器错误或由故障的RAM引起的)。
解决方法:使用反病毒软件的最新版本,检查计算机上是否存在病毒。如果找到病毒。则执行必要的步骤把他从计算机上清除掉,请参阅犯病度软件文档了解如何执行这些步骤。
如果计算机已使用NTFS文件系统格式化。可重新启动计算机,然后在该系统分区上运行Chkdsk /f/r命令。如果由于错误而无法启动命令,那么使用命令控制台,并运行Chkdsk /r命令。
运行由计算机制造商提供的所有的系统在很端软件,尤其是内存检查。
13、停止错误编号:0xC000021A
说明文字:STATUS-SYSTEM-PROCESS-TERMINATED
通常的原因:用户模式子系统,例如Winlogon或客户服务器运行时子系统(CSRSS)已被损坏,所以无法再保证安全性。
解决方法:卸掉所有新近安装的硬件。
如果无法登陆,则重新启动计算机。当出现可用的作系统列表时按F8。在Windows 2000高级选项菜单屏幕上,选择:“最后一次正确的配置”。然后按会车。
运行故障恢复台,并允许系统修复任何检测到的错误。
14、停止错误编号:0xC0000221
说明文字:STATUS-IMAGE-CHECKISU7M-MISMATCH
通常的原因:驱动程序或系统DLL已经被损坏。
解决方法:运行故障复控台,并且允许系统修复任何检测到的错误。
如果在RAM添加到计算机之后,立即发生错误,那么可能是分页文件损坏,或者新RAM由故障或不兼容。删除Pagefile.sys并将系统返回到原来的RAM配置。