谈"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;

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

目录
相关文章
|
1月前
|
前端开发
使用display:inline-block会产生什么问题?解决方法?
【10月更文挑战第27天】使用`display: inline-block`时可能会出现空白间隙和垂直对齐等问题,但通过上述相应的解决方法,可以有效地克服这些问题,实现更精确、更美观的页面布局效果。
|
6月前
|
数据安全/隐私保护 Docker 容器
error: Could not get shadow information for NOUSER 问题如何处理
【6月更文挑战第15天】error: Could not get shadow information for NOUSER 问题如何处理
845 3
|
7月前
|
数据安全/隐私保护
error: Could not get shadow information for NOUSER问题如何处理
【5月更文挑战第15天】error: Could not get shadow information for NOUSER问题如何处理
187 3
display:block小技巧
display:block小技巧
59 0
|
存储 iOS开发
浅谈block
浅谈block
61 0
display:none到display:block失效问题及解决办法
display:none到display:block失效问题及解决办法
356 9
|
程序员 算法框架/工具 Caffe
解决办法:error: 'size_t' does not name a type、unknown type name 'size_t'
解决办法:error: 'size_t' does not name a type、unknown type name 'size_t'
752 0
C中遇到错误error: jump to label [-fpermissive]的解决办法
C中遇到错误error: jump to label [-fpermissive]的解决办法
1006 0
|
存储 编译器 iOS开发
Block 详解
原文链接:www.imlifengfeng.com 一、概述 闭包 = 一个函数「或指向函数的指针」+ 该函数执行的外部的上下文变量「也就是自由变量」;Block 是 Objective-C 对于闭包的实现。
981 0
|
Python
如何解决matplotlib运行出现的Invalid DISPLAY variable
最近在服务器上运行matplotlib相关的脚本时遇到了"Invalid DISPLAY variable"报错,从报错中就可以知道这是因为没有显示设备导致的报错。
1693 0