BSTR bstr;只有一个元素
当j=1时,pbstr+j就已经溢出了!

解决方案 »

  1.   

    在第一段中,当你申明数组时,系统给你分配了一段空间,如果每个元素需n各字节,那么空间是:n*10,所以指针移动是,始终在有效区内。而在第二段中,只分配了n个字节,所以你移动指针时,你访问了其他内存区,所以出现非法操作。这类似于数组越界访问!
      

  2.   

    BSTR* pbstr;    //视为数组的首地址
    只是声明
    你还需要分配一定的空间给它
      

  3.   

    数组名只在作为参数传递时代表的是首地址
    BSTR bstr;//只声明了一个元素,并不能代表整个数组
      

  4.   

    我一时疏忽,忘了分配内存,有劳大家了,正确的代码如下:
    BSTR* pl;
    pl = new BSTR[10];
    for (long j = 0; j < 10; j++)
    *(pl + j) = ::SysAllocString(L"ABC");
    for (j = 0; j < 10; j++)
    ::MessageBox(NULL,_bstr_t(*(pl + j)),"",MB_OK);
    delete[] pl;