这样使用常量字符串会不会有危险?

kx008 2005-03-22 05:39:16
一个全局指针数组:
const char *g_String[100];
在程序入口函数中对此数组进行初始化,对其成员赋值:
g_String[STR_ID1] = "字符串1";
g_String[STR_ID2] = "字符串2";
...
然后在整个程序的其他地方使用g_String[STR_IDn]来代替原来的字符串常量,
便于对字符串常量进行统一管理。
现在我担心这样使用常量字符串会不会有危险?字符串常量在内存中应该是有
相对固定地址的吧,但程序入口函数执行过后,那段内存会不会被程序的其他
代码段覆盖?
...全文
91 点赞 收藏 14
写回复
14 条回复
kx008 2005年03月24日
数组是常量指针数组,因此我不用担心修改它的内容会造成异常,我担心的是,数组是全局数组,在整个程序生命周期内有效,而用来初始化它的字符串常量是属于程序入口函数的,当这个函数执行完毕后,那些字符串常量所存在的空间是否会被其他代码覆盖(当然了,我不会自己写代码去覆盖它),如果被覆盖了,那么在使用全局指针数组的时候将得到一串乱码。
进程的内存是由操作系统管理的吧,我对操作系统不熟悉,虽然我这个用法在使用过程中尚未出现问题,但我还是不放心,所以想请这方面的高手来讲解一下。
回复 点赞
cnwww 2005年03月24日
可以这样用。试试就知道了,Debug下运行一遍就可以知道有否内存问题。
回复 点赞
jerry 2005年03月24日
楼上的担心是没有根据的. "asbbfedf",这样写的字符串是静太串, 根本不会分配空间,所以也不用释放. 这些数据会保存在EXE的一个常量区内.加载到内存的也是一块常量,只读内存! 是只读的, 不用担心被修改, 在整个进程的时间里都会保持不变的, 除非你使用变态的方式去改变它(要Rang0权限才能修改这样的内存,否则你写试试: 非法操作! 操作系统将你杀死.
回复 点赞
jerry 2005年03月23日
这样不用分配什么内存啊.都是静态串. 不过这样的串是不能修改的,否则非法操作等着你
回复 点赞
菜牛 2005年03月23日
没问题。
回复 点赞
mybios 2005年03月22日
这样用完后要delete[]哦。。
回复 点赞
oyljerry 2005年03月22日
可以把那些字符常量放到string table中
回复 点赞
oyljerry 2005年03月22日
常量存储去,一块单独的数据存储区,不允许修改
楼主的赋值,需要先分配内存空间
回复 点赞
adamx 2005年03月22日
常量存储区,是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。
回复 点赞
adamx 2005年03月22日
可以这样用。
回复 点赞
Daniel22_cn 2005年03月22日
const char g_String[100];
回复 点赞
bobob 2005年03月22日
寒~没有分配内存~
回复 点赞
DentistryDoctor 2005年03月22日
这样显然不行,内存在哪分配的?
回复 点赞
bobob 2005年03月22日
不会的
回复 点赞
发动态
发帖子
界面
创建于2007-09-28

7973

社区成员

11.5w+

社区内容

VC/MFC 界面
社区公告
暂无公告