我想了解内存的知识,能介绍一些么?

时间:2022-06-23 00:03:22
我对内存了解不多,尤其是和指针有关的问题,比如如何分配缓冲区等等。
我的指针char * p;如果使用的话就说内存不可写,为什么?

12 个解决方案

#1


具体点

#2


当然 char *p;没对指针进行初始化,p的内容是随机的(可能是指向操作系统正在使用的内存区域)所以是不能修改的。

p=(char*)malloc(100);时P就指向了一块可用区域(malloc是申请内存空间)

#3


char *p要初始化的
不初始化的话,假如指到系统保护的空间,或是搅乱了数据,就出错了
p=new char[100];//这个数字自己看着办
p="hahahahahahah";

#4


实质的说,p只是一个4单元的未赋值的空间。这个空间的内容是用来保存用户定义的地址的。所以你如果没有先对p赋值的话,就想取得其中的内容,这种做法是不可取的。

#5


要先对指针初始化,不然会出现意想不到的错误~!

#6


先要为指针分配内存,比如p= new char[100];

#7


学汇编。。。

#8


初始化为char * p=NULL;也可以。
反正得让指针在定义的时候指到一个合法的位置。要不然会被随及分配一个数值,这个数值是一个内存的地址。如果这个地址是由系统正在使用中,则如果你改变这个地址中的值,系统不是要出错误吗?
所以编译器为了防止这种恶性的后果,当你的初始化指向了非法的位置,就告诉你“内存不可写”
理解了吗?你的内存(比如128M)不是都用来运行你的程序的。其中要有一半是由操作系统使用的(对98和NT而言)其余还得运行别的应用。所以你的指针变量不能滥指。明白了吗?

#9


指针是把双刃刀 , 记得一点 , 声明指针时 , 要么有所指 , 要么就先指向NULL ,待到用时再有所指 .

#10


去看peter norton 的书

#11


感谢大家的帮助,请问peter norton的书是什么呀?

#12


如果你想详细了解内存的工作方式,建议看“计算机组成原理”这门课
比较好的教材有清华的《计算机组成与结构》

#1


具体点

#2


当然 char *p;没对指针进行初始化,p的内容是随机的(可能是指向操作系统正在使用的内存区域)所以是不能修改的。

p=(char*)malloc(100);时P就指向了一块可用区域(malloc是申请内存空间)

#3


char *p要初始化的
不初始化的话,假如指到系统保护的空间,或是搅乱了数据,就出错了
p=new char[100];//这个数字自己看着办
p="hahahahahahah";

#4


实质的说,p只是一个4单元的未赋值的空间。这个空间的内容是用来保存用户定义的地址的。所以你如果没有先对p赋值的话,就想取得其中的内容,这种做法是不可取的。

#5


要先对指针初始化,不然会出现意想不到的错误~!

#6


先要为指针分配内存,比如p= new char[100];

#7


学汇编。。。

#8


初始化为char * p=NULL;也可以。
反正得让指针在定义的时候指到一个合法的位置。要不然会被随及分配一个数值,这个数值是一个内存的地址。如果这个地址是由系统正在使用中,则如果你改变这个地址中的值,系统不是要出错误吗?
所以编译器为了防止这种恶性的后果,当你的初始化指向了非法的位置,就告诉你“内存不可写”
理解了吗?你的内存(比如128M)不是都用来运行你的程序的。其中要有一半是由操作系统使用的(对98和NT而言)其余还得运行别的应用。所以你的指针变量不能滥指。明白了吗?

#9


指针是把双刃刀 , 记得一点 , 声明指针时 , 要么有所指 , 要么就先指向NULL ,待到用时再有所指 .

#10


去看peter norton 的书

#11


感谢大家的帮助,请问peter norton的书是什么呀?

#12


如果你想详细了解内存的工作方式,建议看“计算机组成原理”这门课
比较好的教材有清华的《计算机组成与结构》