关于C语言中的DebugAssertionFailed,编译和执行时不会出错,但执行时会出错。出现此错误的可能原因有:
1直接释放空指针
2)。
以下面的简单程序源码为例:
程序运行时出现错误警告框“DebugAssertionFailed”这这种情况主要是由指针引起的错误造成的。
下图中红框标注的位置是Distance类的析构函数,这里就是使用delete的地方。这里其实没有必要,因为pDist指针是在程序执行完毕时静态分配的,此时它的内存被释放,使用了不存在的指针,从而报错其实delete是和new一起使用的。
扩展信息:除了导致“DebugAssertionFailed”错误的指针之外,数组越界也会导致内存泄漏等错误。
内存泄漏(即MemoryLeak)是指程序中动态分配的内存没有被释放或者由于某种原因无法释放,导致系统内存泄漏,导致程序变慢甚至系统崩溃。
无论是C还是C++程序,运行时分配变量的方式主要有三种:堆分配、栈分配、全局和静态内存分配。内存泄漏主要发生在堆内存分配方式中,即“内存配置完成后,所有指向该内存的指针都丢失了”。
如果没有像语言这样的垃圾回收机制,这样的内存块就无法返回给系统。由于内存泄漏是运行时问题,无法通过编译来识别,只能在程序执行过程中识别和诊断。
参考来源:-内存泄漏
上一篇:c语言内存泄露如何解决
下一篇:c语言怎么避免内存泄露