VS报错 未加载wntdll.pdb
错误原因
class A {
public:
A() {
cout << "A()" << endl;
}
~A() {
cout << "~A()" << endl;
}
};
void test() {
A* a = new A[10];
delete a;
}
上面的代码中使用delete释放了在堆区建立的对象数组空间,导致了这个错误。
正确的写法应该使用delete[] 来释放堆区的对象数组空间
void test() {
A* a = new A[10];
delete[] a;
}
需要注意,使用delete释放堆区基本数据类型的数组是不会产生这个错误的,而且与使用delete[]来释放堆区基本数据类型的数组的效果是一致的。
void test() {
int* a = new int[10];
delete a;
}
总结
- 出现未加载wntdll.pdb大概率是指针使用错误,比如使用野指针、越界访问等。
- 保险起见,应该使用delete[] 释放堆区数组空间。