乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 54|回复: 4

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

[复制链接]

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-7-30 11:34:20 | 显示全部楼层 |阅读模式
我想知道如何从resbuf链中删除最后一项,我已经尝试在尾部使用acutRelRb(),但AutoCAD会爆炸。
有什么想法吗?
  1. // ----- ads_crpssgetex symbol (do not rename)
  2.   //++-- (crpSSGetEx ":$" "Add: " "Remove: " '((0  . "LINE")(8 . "0")))
  3.   static int ads_crpssgetex(void)
  4.   {
  5.     struct resbuf *pTail ;
  6.     struct resbuf *pArgs =acedGetArgs () ;
  7.     if (pArgs == NULL)
  8.       return RSERR;
  9.     if (pArgs->restype != RTSTR )
  10.       return RSERR;
  11.     TCHAR *mode = pArgs->resval.rstring;
  12.     if ((pArgs = pArgs->rbnext) == NULL || pArgs->restype != RTSTR )
  13.       return RSERR;
  14.     TCHAR *AddStr = pArgs->resval.rstring;
  15.     if ((pArgs = pArgs->rbnext) == NULL || pArgs->restype != RTSTR )
  16.       return RSERR;
  17.     TCHAR *RemStr = pArgs->resval.rstring;
  18.     if ((pArgs = pArgs->rbnext) != NULL)
  19.     {
  20.       if ((pArgs = pArgs->rbnext) != NULL)
  21.       {
  22.         resbuf *pItrBuf = pArgs;
  23.         while(pItrBuf != NULL)
  24.         {
  25.           pTail = pItrBuf;
  26.           pItrBuf = pItrBuf->rbnext;
  27.         }
  28.         // >>>>>>>>>>>>>>>>> want to delete pTail restype = 100 ; //workaround
  29.         pTail->resval.rstring = L"AcDbEntity";//workaround
  30.       }
  31.     }
  32.     TCHAR* promts[] = { AddStr , RemStr };
  33.     ads_name set;
  34.     if(acedSSGet(mode,promts,NULL,pArgs,set) == RTNORM)
  35.       acedRetName(set,RTPICKS);
  36.     // acedRetList(pArgs);
  37.     return (RSRSLT) ;
  38.   }

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-7-30 13:01:57 | 显示全部楼层
这似乎行得通代码1]
编辑;堵塞漏洞
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-7-30 18:34:29 | 显示全部楼层
看看如何/如果这飞 -
resbuf *pItrBuf = pArgs;
while(pItrBuf->rbnext != NULL) // 继续循环,直到 'next' rb is NULL
{
pItrBuf = pItrBuf->rbnext;
}
pItrBuf = NULL; // 现在是最后一个 rb,让我们转储它!
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-7-30 23:11:00 | 显示全部楼层
啊!这次明白了。我需要保存指向最后一项的第二个指针,然后使用
pTail->rbNext=NULL;
然后通过调用
acutRelRb(lastbuf)释放最后一个缓冲区中的内存;
我尝试过将最后一项分配为null,但这只将指针分配为null,这对原始resbuf没有任何作用
  1.         resbuf *pItrBuf = pArgs;
  2.         while(pItrBuf->rbnext != NULL)
  3.         {
  4.            pTail = pItrBuf;
  5.            pItrBuf = pItrBuf->rbnext;
  6.         }
  7.         pTail->rbnext = NULL;
  8.         if(pItrBuf)
  9.           acutRelRb(pItrBuf);

回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-7-30 23:18:56 | 显示全部楼层
是的,我现在明白了,指向' next '的指针是空的,但是你必须删除前一个缓冲区指向next的指针,这样它就不会指向最后一个rb。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-6 07:05 , Processed in 0.192330 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表