如何判断一指针所指向的内存有效性??

解决方案 »

  1.   

    用 IsBadReadPtr 函数,BOOL IsBadReadPtr(
      CONST VOID *lp,  // memory address
      UINT_PTR ucb     // size of block
    );
    具体语法看MSDN
      

  2.   

    jruv(江城飞鸿),前几天咱俩短裤还是一样,今天见你升级了,恭喜呀,呵呵!我差20分就又一样了,
      

  3.   

    这牵扯到良好的编程习惯指针要初始化,置NULL, 分配内存释放后也要记得置NULL;
    p = NULL;
    ...
    p = new char[100];
    ....
    delete[] p;
    p = NULL;使用分配的内存之前一定要
    if(p !=NULL)  //p 是指向一块内存区的指针
    {
        ...
    }
    看了从网上down的程序,很少看到用某个函数去判断某块内存是否可用
    --------------------------------------------------------------------一家之言!!
      

  4.   

    对,良好的习惯,指针分配后初始化NULL,释放后NULL,检查是否为NULL。
      

  5.   

    使用指针确实需要养成良好的习惯,要牢牢记住 初始化和复位操作。
    一般在开发很少去检查一个指针地址的有效性,
    不过在MFC的原码中,这样的地方还是很多的。
      

  6.   

    To: SoLike()
    指针地址检验是经常的事,使用指针有很多好处,所以不可能不检验哈
    不同的类有不同的指针检验,比如:SOCKET == INVALID_SOCKET, byte == NULL
    只要在使用的时候注意,就不需要使用专门的函数了
      

  7.   

    TO:SoLike() 
    IsBadReadPtr() OR IsBadWritePtr() 我试了一下无用;
      

  8.   

    BOOL AfxIsValidAddress(
       const void* lp,
       UINT nBytes,
       BOOL bReadWrite = TRUE 
    );MSDN的例子
    // Allocate a 5 character array, which should have a valid memory address.
    char *array = new char[5];// Create a null pointer, which should be an invalid memory address.
    char *null = (char *)0x0;ASSERT(AfxIsValidAddress(array, 5));
    ASSERT(!AfxIsValidAddress(null, 5));
      

  9.   

    ......
    char * lpDesData=new char[100];
    if(!AfxIsValidAddress(lpDesData,200,TRUE))
    {
        MessageBox("内存错误");
        ......
    }
    ......问题是他没报错;
      

  10.   

    如下:
    const int nSize = 100;
    char* lpDesData=new char[nSize];

    if(!AfxIsValidAddress(lpDesData, sizeof(char)*nSize/sizeof(BYTE), TRUE))
    {
       MessageBox("内存错误");
    }
    这是一个有效地址当然不报错
      

  11.   

    http://expert.csdn.net/Expert/topic/1777/1777350.xml?temp=.7148096
      

  12.   

    用这个吧,我试过了
    const int nSize = 100;
    char* lpDesData=new char[nSize];if(!AfxIsMemoryBlock((void*)lpDesData, sizeof(char)*nSize/sizeof(BYTE)))
    {
        MessageBox("内存错误");
    }
      

  13.   

    问题是size超过了,
    我之所以这么做是因为,内存我是在其它地方分配的,但是在写操作时,担心size不够
      

  14.   

    你是要检查一个对一个new空间的访问是否越界,所以上面的方法适合你的要求
      

  15.   

    但是AfxIsMemoryBlock中的第二个参数小于我所分配的字节数也会报错,
    问题是我在用这块内存时,我只知道我要用的字节数,to:: SoLike() 
    非常谢谢你,但可否还有其它函数;
      

  16.   

    建议大家使用new c++ standard lib.
    最近忽然觉得它有点可爱了~~~~~~~~~