MickD 发表于 2008-7-30 11:34:20

从Resbuf链中删除最后一个Resbuf?

我想知道如何从resbuf链中删除最后一项,我已经尝试在尾部使用acutRelRb(),但AutoCAD会爆炸。
有什么想法吗?
// ----- ads_crpssgetex symbol (do not rename)
//++-- (crpSSGetEx ":$" "Add: " "Remove: " '((0. "LINE")(8 . "0")))
static int ads_crpssgetex(void)
{
    struct resbuf *pTail ;
    struct resbuf *pArgs =acedGetArgs () ;
    if (pArgs == NULL)
      return RSERR;
    if (pArgs->restype != RTSTR )
      return RSERR;
    TCHAR *mode = pArgs->resval.rstring;
    if ((pArgs = pArgs->rbnext) == NULL || pArgs->restype != RTSTR )
      return RSERR;
    TCHAR *AddStr = pArgs->resval.rstring;
    if ((pArgs = pArgs->rbnext) == NULL || pArgs->restype != RTSTR )
      return RSERR;
    TCHAR *RemStr = pArgs->resval.rstring;
    if ((pArgs = pArgs->rbnext) != NULL)
    {
      if ((pArgs = pArgs->rbnext) != NULL)
      {
      resbuf *pItrBuf = pArgs;
      while(pItrBuf != NULL)
      {
          pTail = pItrBuf;
          pItrBuf = pItrBuf->rbnext;
      }
      // >>>>>>>>>>>>>>>>> want to delete pTail restype = 100 ; //workaround
      pTail->resval.rstring = L"AcDbEntity";//workaround
      }
    }
    TCHAR* promts[] = { AddStr , RemStr };
    ads_name set;
    if(acedSSGet(mode,promts,NULL,pArgs,set) == RTNORM)
      acedRetName(set,RTPICKS);
    // acedRetList(pArgs);
    return (RSRSLT) ;
}

**** Hidden Message *****

MickD 发表于 2008-7-30 13:01:57

这似乎行得通代码1]
编辑;堵塞漏洞

MickD 发表于 2008-7-30 18:34:29

看看如何/如果这飞 -
resbuf *pItrBuf = pArgs;
while(pItrBuf->rbnext != NULL) // 继续循环,直到 'next' rb is NULL
{
pItrBuf = pItrBuf->rbnext;
}
pItrBuf = NULL; // 现在是最后一个 rb,让我们转储它!

MickD 发表于 2008-7-30 23:11:00

啊!这次明白了。我需要保存指向最后一项的第二个指针,然后使用
pTail->rbNext=NULL;
然后通过调用
acutRelRb(lastbuf)释放最后一个缓冲区中的内存;
我尝试过将最后一项分配为null,但这只将指针分配为null,这对原始resbuf没有任何作用
      resbuf *pItrBuf = pArgs;
      while(pItrBuf->rbnext != NULL)
      {
         pTail = pItrBuf;
         pItrBuf = pItrBuf->rbnext;
      }
      pTail->rbnext = NULL;
      if(pItrBuf)
          acutRelRb(pItrBuf);

MickD 发表于 2008-7-30 23:18:56

是的,我现在明白了,指向' next '的指针是空的,但是你必须删除前一个缓冲区指向next的指针,这样它就不会指向最后一个rb。
页: [1]
查看完整版本: 从Resbuf链中删除最后一个Resbuf?