谈"DAMAGE:after Normal block"的解决方法

简介: 在释放内存时,崩溃了,出现了如下错误: User breakpoint called from code at 0x7c921230 Debug Assertion Failed! Program:.

在释放内存时,崩溃了,出现了如下错误:

User breakpoint called from code at 0x7c921230

Debug Assertion Failed! Program:...

File: dbgheap.c

Line: 1011 Expression: _CrtIsValidHeapPointer(出现问题的指针)

For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

如果点击忽略,则继续弹出对话框 Debug Error! Program:...

DAMAGE: after Normal block (#4826967) at 0x2000E148.

(Press Retry to debug the application)

正如上次所述(http://hi.baidu.com/ablenavy/blog/item/6092524e88ff020db2de0516.html

(DAMAGE:after Normal block的解决方法)

这次的原因依然是内存申请得太小!

具体代码如下:

#define P2Node_LEN_1 (1024 * 10)

#define P2Node_LEN_2 1024 // Sct_Node是一个结构体

Sct_Node **p2Node; //定义一个指向Sct_Node的指针的指针,相当于二维数组。

// 空间申请

p2Node = (Sct_Node **)malloc(P2Node_LEN_1 * sizeof(Sct_Node *));

for (int i = 0; i < P2Node_LEN_1; i++)

{

    p2Node[i] = (Sct_Node *)malloc(P2Node_LEN_2 * sizeof(Sct_Node));

}

// 向p2Node插入数据

pSharedData->p2Node[i][j] = sct_Node; // 释放空间

for ( int i = 0; i < P2Node_LEN_1; i++ )

{

    free( p2Node[i] ); //经调试,在该语句中出现崩溃。

}

free( p2Node );

经跟踪程序发现,在向p2Node插入数据时,j的值超过了1024,但可以正常插入,不会出现错误,等释放空间时才出现错误。

解决办法:

将 #define P2Node_LEN_2 1024 改为:

#define P2Node_LEN_2 (1024 * 10)

如何从根本上消除这种错误?!

其实很简单,在插入时加入边界检查,如下:

将插入语句:

pSharedData->p2Node[i][j] = sct_Node;

改为:

if ( j >= P2Node_LEN_2 )

{

    cout << "Error! Out of memory! P2Node_LEN_2 is too small" << endl;

    exit(1);

}

pSharedData->p2Node[i][j] = sct_Node;

这样就可以避免出现上述的崩溃现象了。

目录
相关文章
|
机器学习/深度学习 人工智能 达摩院
AIGC玩转卡通化技术实践
伴随着持续不断的AIGC浪潮,越来越多的AI生成玩法正在被广大爱好者定义和提出,图像卡通化(动漫化)基于其还原效果高,风格种类丰富等特点而备受青睐。早在几年前,伴随着GAN网络的兴起,卡通化就曾经风靡一时。而今,伴随着AIGC技术的兴起和不断发展,扩散生成模型为卡通化风格和提供了更多的创意和生成的可能性。本文就将详细介绍达摩院开放视觉团队的卡通化技术实践。
|
存储 安全 Shell
[网络安全]upload-labs Pass-12 解题详析
[网络安全]upload-labs Pass-12 解题详析
265 0
|
Web App开发 编解码 Android开发
2023年音视频开发知识技术合集(基础入门到高级进阶)
2023年音视频开发知识技术合集(基础入门到高级进阶)
|
API C# 开发者
WPF图形绘制大师指南:GDI+与Direct2D完美融合,带你玩转高性能图形处理秘籍!
【8月更文挑战第31天】GDI+与Direct2D的结合为WPF图形绘制提供了强大的工具集。通过合理地使用这两种技术,开发者可以创造出性能优异且视觉效果丰富的WPF应用程序。在实际应用中,开发者应根据项目需求和技术背景,权衡利弊,选择最合适的技术方案。
968 1
|
11月前
|
算法
基于PSO粒子群优化的配电网可靠性指标matlab仿真
本程序基于PSO粒子群优化算法,对配电网的可靠性指标(SAIFI、SAIDI、CAIDI、ENS)进行MATLAB仿真优化。通过调整电网结构和设备配置,最小化停电频率和时长,提高供电连续性和稳定性。程序在MATLAB 2022A版本上运行,展示了优化前后指标的变化。PSO算法模拟鸟群行为,每个粒子代表一个潜在解决方案,通过迭代搜索全局最优解,实现配电网的高效优化设计。
318 15
|
11月前
|
NoSQL 前端开发 测试技术
👀探秘微服务:从零开启网关 SSO 服务搭建之旅
单点登录(Single Sign-On,简称SSO)是一种认证机制,它允许用户只需一次登录就可以访问多个应用程序或系统。本文结合网关和SaToken快速搭建可用的Session管理服务。
735 8
|
安全 Java 测试技术
单元测试一篇汇总
本文详细介绍了软件开发中的单元测试,包括其重要性和好处。单元测试主要用于确保程序模块代码的正确性,常使用的测试框架有JUnit和TestNG。文章重点讲解了JUnit框架,包括其注解、断言方法及JUnit 3.x和4.x的区别。此外,还列举了八大常用的单元测试框架,如Arquillian、JTest、The Grinder、TestNG、JUnit、JWalk、Mockito和PowerMock,帮助读者更好地理解和应用单元测试。
单元测试一篇汇总
天气预报1天-中国气象局-地址查询版免费API接口教程
此接口提供中国气象局官方的当日天气信息,支持POST和GET请求,需提供用户ID、KEY、省份及具体地点。返回数据包括状态码、消息、天气详情等。示例中使用的ID与KEY为公共测试用,建议使用个人ID与KEY以享受更高调用频次。
2581 9
|
存储 算法 C++
【搜索算法】 跳马问题(C/C++)
【搜索算法】 跳马问题(C/C++)
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
345 0