我的程序在运行中有时会报错:
  xx指令引用的xx内存不能为read 或
  xx指令引用的xx内存不能为write,
  请问问题出在哪里?谢谢

解决方案 »

  1.   

    引用变量前要初始化,
    数组越界都会造成 该断言
    特别是指针,ASSERT宏的检查十分严格
      

  2.   

    非常感谢,说的都有道理,欢迎更多高手赐教;
    还有一个问题,指针不初始化可以吗,同一指针初始化两次(均赋值为NULL)会有问题吗?
      

  3.   

    “野指针”不是NULL 指针,是指向“垃圾”内存的指针。人们一般不会错用NULL
    指针,因为用if 语句很容易判断。但是“野指针”是很危险的,if 语句对它不起作用。
    “野指针”的成因主要如下:
    (1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL 指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。例如
    char *p = NULL;
    char *str = (char *) malloc(100);
    (2)指针p 被free 或者delete 之后,没有置为NULL,让人误以为p 是个合法的指针。
    (3)指针操作超越了变量的作用范围。这种情况让人防不胜防,示例程序如下:
    class A
    {
    public:
    void Func(void){ cout << “Func of class A” << endl; }
    };
    void Test(void)
    {
    A *p;
    {
    A a;
    p = &a; // 注意a 的生命期
    }
    p->Func(); // p 是“野指针”
    }
    函数Test 在执行语句p->Func()时,对象a 已经消失,而p 是指向a 的,所以p 就成了“野指针”。但奇怪的是运行这个程序时居然没有出错,这可能与编译器有关。
      

  4.   

    to:laoshiren002(老实人) 
    同一指针初始化两次(均赋值为NULL)会有问题吗?初始话只有1次!第2次是赋值,不是初始话,赋值n次都没有问题,指针也是变量。
      

  5.   

    hehe,多数是因为你的指针没有初始化