VC下试验这样一段代码:
int main() //code 1
{
char ps[10] = "aBCD";
ps[0] = 'A';
}
这没有问题,但若将代码改成:
int main() //code 2
{
char * ps = "aBCD";
ps[0] = 'A';
}
则执行到ps[0] = 'A'时有访内异常。我想是不是因为code 2时字符串"aBCD"在code段中所以不允许修改呢?而code 1中的字符串"aBCD"是在数据段中故可读可写?
如果是这样,那一般程序中的数据放在code段还是data段是依据怎样的rule的呢?
int main() //code 1
{
char ps[10] = "aBCD";
ps[0] = 'A';
}
这没有问题,但若将代码改成:
int main() //code 2
{
char * ps = "aBCD";
ps[0] = 'A';
}
则执行到ps[0] = 'A'时有访内异常。我想是不是因为code 2时字符串"aBCD"在code段中所以不允许修改呢?而code 1中的字符串"aBCD"是在数据段中故可读可写?
如果是这样,那一般程序中的数据放在code段还是data段是依据怎样的rule的呢?
---------------------------
ps没有分配内存空间。
---------------------------
ps没有分配内存空间。
ps="aBCD";
"aBCD"是一个文字常量
所以它放在常量区中
不能去改动的
这样编译不出错
#include "iostream.h"
#include <memory.h>int main() //code 2
{
char *ps = new char[10];
memset(ps,0,10);
ps[0] = 'a';
ps = "hoho";
//ps[0] = 'A';
cout<<ps<<endl;
}...........................................但这样就不行了#include "iostream.h"
#include <memory.h>int main() //code 2
{
char *ps = new char[10];
memset(ps,0,10);
//ps[0] = 'a';
ps = "hoho";
ps[0] = 'A';
cout<<ps<<endl;
}................................会不会是在执行了
ps = "hoho"后
内存的访问权限发生了什么变化
又指向常量了
不是权限发生了改变,
而是PS指向的位置不同了