Alex Rivera | Logout

Does dereferencing deleted pointers always result in a crash?

Asked 2010-05-24T10:29:53.660
12

I have a very simple C++ code sample here:

char *s = new char[100];
strcpy(s, "HELLO");
delete [] s;
int n = strlen(s);

If I run this code from Visual C++ 2008 by pressing F5 (Start Debugging,) this always result in crash (Access Violation.) However, starting this executable outside the IDE, or using the IDE's Ctrl+F5 (Start without Debugging) doesn't result in any crash. What could be the difference?

I also want to know if it's possible to stably reproduce the Access Violation crash caused from accessing deleted area? Is this kind of crash rare in real-life?

Edit
Report

2 Answers

22

Accessing memory through a deleted pointer is undefined behavior. You can't expect any reliable/repeatable behavior.

Most likely it "works" in the one case because the string is still "sitting there" in the now available memory -= but you cannot rely on that. VS fills memory with debug values to help force crashes to help find these errors.

answered 2010-05-24T10:36:41.740
1

The executable with debug symbols is able to detect some cases of access violations. The code to detect this is contained in the executable, but will not be triggered by default.

Here you'll find an explanation of how you can control behaviour outside of a debugger: http://msdn.microsoft.com/en-us/library/w500y392%28v=VS.80%29.aspx

answered 2010-05-24T10:50:16.030

Your Answer