我的指针char * p;如果使用的话就说内存不可写,为什么?
12 个解决方案
#1
具体点
#2
当然 char *p;没对指针进行初始化,p的内容是随机的(可能是指向操作系统正在使用的内存区域)所以是不能修改的。
当
p=(char*)malloc(100);时P就指向了一块可用区域(malloc是申请内存空间)
当
p=(char*)malloc(100);时P就指向了一块可用区域(malloc是申请内存空间)
#3
char *p要初始化的
不初始化的话,假如指到系统保护的空间,或是搅乱了数据,就出错了
p=new char[100];//这个数字自己看着办
p="hahahahahahah";
不初始化的话,假如指到系统保护的空间,或是搅乱了数据,就出错了
p=new char[100];//这个数字自己看着办
p="hahahahahahah";
#4
实质的说,p只是一个4单元的未赋值的空间。这个空间的内容是用来保存用户定义的地址的。所以你如果没有先对p赋值的话,就想取得其中的内容,这种做法是不可取的。
#5
要先对指针初始化,不然会出现意想不到的错误~!
#6
先要为指针分配内存,比如p= new char[100];
#7
学汇编。。。
#8
初始化为char * p=NULL;也可以。
反正得让指针在定义的时候指到一个合法的位置。要不然会被随及分配一个数值,这个数值是一个内存的地址。如果这个地址是由系统正在使用中,则如果你改变这个地址中的值,系统不是要出错误吗?
所以编译器为了防止这种恶性的后果,当你的初始化指向了非法的位置,就告诉你“内存不可写”
理解了吗?你的内存(比如128M)不是都用来运行你的程序的。其中要有一半是由操作系统使用的(对98和NT而言)其余还得运行别的应用。所以你的指针变量不能滥指。明白了吗?
反正得让指针在定义的时候指到一个合法的位置。要不然会被随及分配一个数值,这个数值是一个内存的地址。如果这个地址是由系统正在使用中,则如果你改变这个地址中的值,系统不是要出错误吗?
所以编译器为了防止这种恶性的后果,当你的初始化指向了非法的位置,就告诉你“内存不可写”
理解了吗?你的内存(比如128M)不是都用来运行你的程序的。其中要有一半是由操作系统使用的(对98和NT而言)其余还得运行别的应用。所以你的指针变量不能滥指。明白了吗?
#9
指针是把双刃刀 , 记得一点 , 声明指针时 , 要么有所指 , 要么就先指向NULL ,待到用时再有所指 .
#10
去看peter norton 的书
#11
感谢大家的帮助,请问peter norton的书是什么呀?
#12
如果你想详细了解内存的工作方式,建议看“计算机组成原理”这门课
比较好的教材有清华的《计算机组成与结构》
比较好的教材有清华的《计算机组成与结构》
#1
具体点
#2
当然 char *p;没对指针进行初始化,p的内容是随机的(可能是指向操作系统正在使用的内存区域)所以是不能修改的。
当
p=(char*)malloc(100);时P就指向了一块可用区域(malloc是申请内存空间)
当
p=(char*)malloc(100);时P就指向了一块可用区域(malloc是申请内存空间)
#3
char *p要初始化的
不初始化的话,假如指到系统保护的空间,或是搅乱了数据,就出错了
p=new char[100];//这个数字自己看着办
p="hahahahahahah";
不初始化的话,假如指到系统保护的空间,或是搅乱了数据,就出错了
p=new char[100];//这个数字自己看着办
p="hahahahahahah";
#4
实质的说,p只是一个4单元的未赋值的空间。这个空间的内容是用来保存用户定义的地址的。所以你如果没有先对p赋值的话,就想取得其中的内容,这种做法是不可取的。
#5
要先对指针初始化,不然会出现意想不到的错误~!
#6
先要为指针分配内存,比如p= new char[100];
#7
学汇编。。。
#8
初始化为char * p=NULL;也可以。
反正得让指针在定义的时候指到一个合法的位置。要不然会被随及分配一个数值,这个数值是一个内存的地址。如果这个地址是由系统正在使用中,则如果你改变这个地址中的值,系统不是要出错误吗?
所以编译器为了防止这种恶性的后果,当你的初始化指向了非法的位置,就告诉你“内存不可写”
理解了吗?你的内存(比如128M)不是都用来运行你的程序的。其中要有一半是由操作系统使用的(对98和NT而言)其余还得运行别的应用。所以你的指针变量不能滥指。明白了吗?
反正得让指针在定义的时候指到一个合法的位置。要不然会被随及分配一个数值,这个数值是一个内存的地址。如果这个地址是由系统正在使用中,则如果你改变这个地址中的值,系统不是要出错误吗?
所以编译器为了防止这种恶性的后果,当你的初始化指向了非法的位置,就告诉你“内存不可写”
理解了吗?你的内存(比如128M)不是都用来运行你的程序的。其中要有一半是由操作系统使用的(对98和NT而言)其余还得运行别的应用。所以你的指针变量不能滥指。明白了吗?
#9
指针是把双刃刀 , 记得一点 , 声明指针时 , 要么有所指 , 要么就先指向NULL ,待到用时再有所指 .
#10
去看peter norton 的书
#11
感谢大家的帮助,请问peter norton的书是什么呀?
#12
如果你想详细了解内存的工作方式,建议看“计算机组成原理”这门课
比较好的教材有清华的《计算机组成与结构》
比较好的教材有清华的《计算机组成与结构》