• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

马不停蹄

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

BCB中String作为结构体成员

在做项目的时候,自己定义了一个这样的结构体

typedef struct info{
  String a;
  String b;
  info* next;
}TInfo;

想用这个结构做一个自增的数组,我就这样子做

 TInfo *a=(TInfo*)malloc(sizeof(TInfo));
 a->a="xingmingjkhjkhdskjhfjkhjkdhfjkhskjfdhjkhfjkhdjkhjfkhjkdhkfjhjkdhfjkhkjdhf";
 a->b="lihua";
 a->next=NULL;
以下开始增加2个空间 

TInfo *f= a;
 a=(TInfo*)malloc(3*sizeof(TInfo));
 memcpy(a,f,sizeof(TInfo)) ;
 //f->a.~UnicodeString();
 //f->b.~UnicodeString();
// free(f);
 //  if(f!=NULL)
 free(f);
 ShowMessage(a->a);
 this->Edit1->Text=a->b;
 free(a);

 

经过深入研究后发现,a所拥有的新成员a->a所存储的信息居然还是原来那块空间,即刚开始申请的那块空间,如果你不信,可以用以上红色代码测试以下,所以这样子就存在着很大的漏洞,万一原来的空间被释放掉,那么以后新申请的空间所指向的就是未知的数据了,这相当危险。也好发现的早,所以现在重新考虑还是可以避免以后的灾难的。如有不同意见,欢迎矫正。

posted on 2012-04-01 17:20  马不停蹄  阅读(510)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3