有一个源程序里有Globalxxx函数
看msdn说globallock是锁定内存,什么叫锁定呢
还有我看上面说这些函数好像是为了兼容16位windows的,而且我要把他移植到linux上,所以想把他去掉,但执行出错源程序:
 lzw->h_code        = GlobalAlloc( GHND, 100 );
 lzw->lp_code       = (unsigned short *)GlobalLock( lzw->h_code   );
 ....
 GlobalUnlock( lzw->h_code   );
 GlobalFree( lzw->h_code  );
我改为
 lzw->h_code       = new unsigned short[100];   
 lzw->lp_code      = (unsigned short *)lzw->h_code;
 ...
 delete [] lzw->h_code;

解决方案 »

  1.   

    GlobalAlloc( GHND, 100 );分配的空间和new unsigned short[100]; 大小不一样啊
      

  2.   

    而且h_code是个句柄,你用指针替代会有访问危险的
      

  3.   

    GlobalAlloc( GHND, 100 );分配的空间和new unsigned short[100]; 大小不一样啊
    ----
    写错了,原来是 GloablAlloc ( GHND , 100 *sizeof(DWORD ) )而且h_code是个句柄,你用指针替代会有访问危险的
    就没法替代为标准C么
      

  4.   

    GlobalAlloc( GHND, 100) 从进程默认的堆上分配一块可移动的内存。等同于HeapAlloc(GetProcessHeap(),...)32位系统中,与LocalAlloc效果相同由于为可移动内存,需锁定后再使用。
      

  5.   

    linux下面内存机制不太一样吧。Windows下用GlobalAlloc得到的句柄可以跨模块访问,这是一般在堆上new出来的东西所做不到的,但是好像linux下面用malloc/free是可以访问的吧?你看看linux内核方面的书呢
      

  6.   

    GlobalLock GloableAlloc 是16位时代的东西,现在可以用别的分配方式来代替。