怎么防止非法内存的访问?

时间:2022-07-26 18:22:05
嗯,小弟的程序在老是在结束的时候说什么内存非法访问,是发生在Memcpy()中,我想是否可以这样:在对内存拷贝以前,判断这段内存是否可以访问,如果不行,就不要Memcpy了,有谁知道怎么判断这段内存是否可以访问呢?

6 个解决方案

#1


没有方法判断。
还是使用好的内存使用方法,在定义变量后把它初始为NULL,释放后置为NULL。

#2


以下函数有用:
IsBadWritePtr
The IsBadWritePtr function verifies that the calling process has write access to the specified range of memory. 

BOOL IsBadWritePtr(
  LPVOID lp,     // memory address
  UINT_PTR ucb   // size of memory block
);

IsBadReadPtr
The IsBadReadPtr function verifies that the calling process has read access to the specified range of memory. 

BOOL IsBadReadPtr(
  CONST VOID *lp,  // memory address
  UINT_PTR ucb     // size of block
);

#3


非法内存访问,一般都是你自己定义的指针指向了你不该指的地方,是由你自己的程序逻辑错误造成了,避免的办法是在Memcpy之前保证参数的正确。

#4


自己写程序时注意点,

#5


自己写程序时注意点,

#6


谢谢各位呀,但是我的程序就是在退出的时候有问题,我看了,一直都不知道怎么办,我试试BugSpy(Bug007)的办法.........
谢谢,BugSpy,试好成功了,马上给你分

#1


没有方法判断。
还是使用好的内存使用方法,在定义变量后把它初始为NULL,释放后置为NULL。

#2


以下函数有用:
IsBadWritePtr
The IsBadWritePtr function verifies that the calling process has write access to the specified range of memory. 

BOOL IsBadWritePtr(
  LPVOID lp,     // memory address
  UINT_PTR ucb   // size of memory block
);

IsBadReadPtr
The IsBadReadPtr function verifies that the calling process has read access to the specified range of memory. 

BOOL IsBadReadPtr(
  CONST VOID *lp,  // memory address
  UINT_PTR ucb     // size of block
);

#3


非法内存访问,一般都是你自己定义的指针指向了你不该指的地方,是由你自己的程序逻辑错误造成了,避免的办法是在Memcpy之前保证参数的正确。

#4


自己写程序时注意点,

#5


自己写程序时注意点,

#6


谢谢各位呀,但是我的程序就是在退出的时候有问题,我看了,一直都不知道怎么办,我试试BugSpy(Bug007)的办法.........
谢谢,BugSpy,试好成功了,马上给你分