问题:
全局变量const char* test = NULL;
然后在函数A中要改变它
- void funcA()
- {
- char test2[512];
- strcpy(test2, "this is a test");
- test = test2;
- }
但 是,我们知道,test2是在栈上分配的,上面的代码是有问题的
如果我们在堆上分配,如下
- void funcA()
- {
- char* test2 = (char*)malloc(512);
- strcpy(test2, "this is a test");
- test = test2;
- }
这 样的话,需要释放test
- if (test)
- free(test);
错误如下:
invalid conversion from ‘const void*’ to ‘void*’
请问,遇到这种情况要怎么办?如果我一定要const char* test;
谢谢
解决办法:
const char *p
p指针的值(内存地址)可以改变,但是该内存地址指向的内存区域是只读。
以上如你所说,没错。
但是const char *p这个指针不需要释放。
实在你想释放这个指针指向的内存空间,请定义一个非const的指针,比方说char *q,
然后q = p,然后free(q)吧。
const char*指向的内存空间真的不能修改吗?
我的理解是:
用const char *p 指向得一块空间,不能通过p指针对内存空间进行写入。
同样一块空间,用char *q去指向它,就可以借助char *q修改其中的内容。
所以,你可能是怕其它子程序访问这块内存时修改了它的内容,那你可以在公开这块内存前先戴上一个const char *p套。
而你自己却可以享有特权,通过char *q为所欲为,欲仙欲死~~