要添加的新项目必须来自之前的6个点,所以我没有分配新内存,而是考虑使用前面的指针,如下所示:
while (currentSize < 14){ int rndPoint = getRandomPoint(0,5); //random index to choose from the vector points->push_back(points[randPoint]);}
在类的析构函数中,当我要释放内存时,我正在执行以下 *** 作:
for(int i=0;i<points.size(); ++i){ if(points[i] != NulL){ delete (points[i]); }}
但是,当我尝试退出程序时 – 我在循环中遇到访问冲突错误(特别是当我到达索引6时).当我已经通过使用删除删除了6个唯一点时,为什么条件if(points [i]!= NulL)导致i = 6,7 … 13为真?
解决方法 使用智能指针.如果您的程序源包含delete,并且它不在智能指针的删除器中,则程序将被破坏. (为什么你会这样做而不是std :: default_deleter?).2014年“最佳智能指针奖”的获胜者是std :: unique_ptr,当你只需复制指针时,std :: shared_ptr值得一提.
规则零意味着您几乎不需要自己实现析构函数/等,因为您应该始终使用通用资源管理类来自行管理它.
总结以上是内存溢出为你收集整理的c – 防止双指针删除全部内容,希望文章能够帮你解决c – 防止双指针删除所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)