一个内在分配问题。 ( 积分: 0 )

  • 主题发起人 主题发起人 y7y8yyy
  • 开始时间 开始时间
Y

y7y8yyy

Unregistered / Unconfirmed
GUEST, unregistred user!
看如下代码:
var
p: pchar;
size: cardinal;
being
size := max_computername_length + 1;
getmem(p,size);
getcomputername(p,size);
showmessage(p);
freemem(p);
我的问题是,当我把getmem(p,size)这句用 P := 'XXXXXXXXXXXXX'代替时,出错。
可我不理解为什么。getmem不就是给p分配内存吗?难道p := 'XXXXXXXXXXXXX'这句
不会给P分配内存吗??求高手指点迷津!!
 
P := 'XXXXXXXXXXXXX'
是将指针p指向 'XXXXXXXXXXXXX'
'XXXXXXXXXXXXX'是常量,在内存的常量区
出错也不是这句出错:
P := 'XXXXXXXXXXXXX'
而是:
freemem(p);
出错

因为p本身并没有分配内存,而要释放常量的内存,内存的常量区是只读的,不允许释放。
 
楼上的说对了前一半.
P:= 'XXXXXX';
P指向的是常量区,那么这个内存块就是只读的.
getcomputername(p,size);这句话要给P指向的内存赋值这个时候就已经报错了
 
感谢楼上回答,可是我刚才把freemem这句注释,错误依旧。另外,楼主说的,我不理解。
如果p :='XXXXXXXXXXX'是把指针指向常量区,而常量区是只读的。那么。我给p重新赋值p := 'ddddddddd'不是重新修改的p的值吗?应该怎么理解呢。
 
改的是p的值没错
但p的值就是一个地址
只是指向新的地址而已
 
P:='XXX';
P:='ddd';

常量区就会有两个常量'XXX'和'ddd'
P的值指向发生了改变,但是常量的内容还是不变的
 
没注意getcomputername(p,size);这一句
这句也是出错的原因,因为p并为分配内存
任何要改变常量区的操作都会出错
下面的代码也要出错:
var
p:PChar;
begin
p:='aa';
FreeMem(p);
end;
 
谢谢楼上各位。我现在明白了。并且验证了楼上所说的。请看下面代码:
var
p: pchar;
i,m: integer;
begin
p := 'asfasdf';
i := integer(p);
p := 'gdgad';
m := integer(p);
showmessage('地址1:' + inttostr(i) + '地址2:' + inttostr(m));
end;
结果发现。地址2刚好比地址1大了8.第一个p的值为'asfasdf'是7位,还有一位就是所谓的零标志位了吧。
哈哈,谢谢大家。
 
如果你想花最少的钱学习流行的计算机技术,本人低价提供
计算机专业高清晰 视 频 教 程,所有教程由业内名家讲解,物超所值,
所有光盘4元/张,特快专递全国三天内到货.
联系方式:手 机:1 3 5 76145612(手机联系佳) Q Q:108410943
E-mail:ncncldjjg@126.com
1、Oracle9iOCP(Oracle认证专家DBA)视频教程(23CD)
2、SQL语言、数据挖掘、SQLServer2000视频教程(6CD)
3、计算机网络原理视频教程(4CD)
4、计算机实用组网技术视频教程(3CD)
5、MCSE(微软认证系统工程师)认证视频教程(11CD)
6、windows2003即学即会视频教程(6CD)
7、J2EE Web程序开发定向班/Java就业班视频教程
(java基础jsp核心技术UML设计)(13CD)
8、J2EE基础高级案例分析视频教程(9CD)
9、马士兵J2SE入门与精通(含坦克大战、BBS实例)视频教程(6CD)
10、java语言深入详解视频教程(12CD)
11、java技术从入门到精通视频教程(21CD)
12、javascript全接触视频教程(13CD)
13、各类网站源程序(9CD)
14、unix原理视频教程(3CD)
15、Linux软件开发工程师(C语言)视频教程(4CD)
16、Linux配置、管理、优化实战工程师视频教程(8CD)
17、Linux内核编程视频教程(11CD)
18、C语言详解视频教程(2CD)
19、VC++6.0(MFC)开发技术术详解视频教程(6CD)
20、ASP.NET中文视频教程(3CD)
21、洪恩C#入门多媒体教程(1CD)
22、XML技术视频教程(2CD)
23、操作系统视频教程(3CD)
24、网络技术基础视频教程(2CD)
25、数据结构视频教程(5CD)
26、清华大学计算机专业多媒体教程(数据结构、汇编、编译原理等)(13CD)
27、大学数学[离散数学线性代数概率与数理统计微积分]视频教程(22CD)
28、LearnKey Asp.Net (老外用英语讲课)(13CD)
29、LearnKey Asp.Net Webservice(老外用英语讲课)(5CD)
30、AppDev Asp.Net2.0 UsingC# (老外用英语讲课)(1CD)
31、APPDev .Net Framework(老外用英语讲课)(2CD)
32、林清安pro/e2001(野火版)视频教程(18CD)
33、深圳大学3D设计视频教程(4CD)
34、3DMAX建模视频教程(老外用英语讲课)(6CD)
35、3DMAX纹理与贴图材质灯光视频教程(老外用英语讲课)(5CD)
36、3DMAX格式500个常用模型库(4CD)
37、lightscape基础入门视频教程(2CD)
38、聚光制造(lightscape3.2入门与精通视频教程)(4CD)
39、coreldraw12中文版入门与精通swf格式视频教程(2CD)
 
后退
顶部