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的呢?

解决方案 »

  1.   

    char * ps = "aBCD";
    ---------------------------
    ps没有分配内存空间。
      

  2.   

    char * ps = "aBCD";中 ps指向的是const内存
      

  3.   

    ps指向的区域是const,不能写入
      

  4.   

    char * ps = "aBCD";
    ---------------------------
    ps没有分配内存空间。
      

  5.   

    char *ps;
    ps="aBCD";
    "aBCD"是一个文字常量
    所以它放在常量区中
    不能去改动的
      

  6.   


    这样编译不出错
    #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"后
    内存的访问权限发生了什么变化
      

  7.   

    ps = "hoho"
    又指向常量了
    不是权限发生了改变,
    而是PS指向的位置不同了