其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·前两天看到的#pragma用法
·用C写的简单学生成绩管理系统
·射频芯片nRF401天线设计的分析
·入门系列--OpenGL最简单的入门
·简单的CreateRemoteThread例程-初学者必看
·BCB数据库图像保存技术
·GNU中的Makefile
·使用AutoMake轻松生成Makefile
·数据结构

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
闲着无事,写了一个检测内存越界访问的工具(windows平台)

作者:未知 来源:月光软件站 加入时间:2005-5-13 月光软件站

// 文件名:memcheck.h
// 作者 : Moonwell
// msn : archonzhao@hotmail.com
// 在需要检测内存越界的地方加上#include "memcheck.h"
// 程序运行过程中,出现内存越界访问的代码将会出现中断

#ifndef _MEM_CHECK_H
#define _MEM_CHECK_H

void * operator new (size_t size)
{
//创建的页面个数
int page_num = (int) ( size / 4096 + 1 );

//偏移量
size_t offset = page_num * 4096 - size;

//在内存块的后面创建一个额外的保护页面,并且将页面的属性设置为不可读写
void *p = VirtualAlloc(NULL,page_num*4096+1,MEM_COMMIT,PAGE_EXECUTE_READWRITE);

//定位最后一个保护页面的地址
void *pchecker = (char *)p + page_num*4096;

//设置最后一页为不可读写
DWORD old_value;
VirtualProtect(pchecker,4096,PAGE_NOACCESS,&old_value);

return (char *)p + offset;
}
 
void operator delete (void *p)
{
//找到VirtualAlloc时候的起始地址
p = (char *)p - (size_t)p % 4096;

VirtualFree(p,0,MEM_RELEASE);
}

#endif


//总共没有几行代码,使用举例如下:

#include <windows.h>
#include "memcheck.h"

int main(int argc,char *argv[])
{
       char * a = new char[12340];
       printf("%c",a[12340]); //程序运行到这里将出现debug中断

       delete [] a;
       return 0;
}


注意:每次new操作,至少会创建比原来多4k的内存,比较耗内存.




相关文章

相关软件




月光软件程序下载编程文档电脑教程网站设计网址导航网络文学游戏天地幽默笑话生活休闲写作范文安妮宝贝
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有