C++ VS2015提示未加载 wntdll.pdb

vs编译出现未加载 wntdll.pdb 今天在编写程序的时候在编译的过程中出现了一个对话框提示程序已经出现一个断点,然后跳转界面提示未加载 wntdll.pdb,或者说很多vs版本在编译的时候经常会出现 无法查找或打开 PDB 文件。 “ConsoleApplication1.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。 “ConsoleApplic 阅读详情

报错信息:

未加载wntdll.pdb,下面的框架可能不正确/或缺失,没有为ntdll.dll加载符号。

出错原因:
你的指针指向了错误的东西 / 你调用你的指针释放了奇怪的内容,和内存的调用有很大的关系,比如new的使用。

案例:

有问题的代码:

#include<iostream>
#include<ctime>
#include<fstream>
#include<string>
#include<stack>
#include<vector>
#include<map>
using namespace std;
class Name {
private:
   char* first;
   char* second;
    char* third;

public:
    Name(string f = "", string s = "", string t = "")
    {
        first = new char[f.length() + 1];
        second = new char[s.length() + 1];
        third = new char[t.length() + 1];
        strcpy_s(first, f.length() + 1, f.c_str());
        strcpy_s(second, s.length() + 1, s.c_str());
        strcpy_s(third, t.length() + 1, t.c_str());
    }
    Name(Name& name)
    {
       
    }
    ~Name()
    {
        cout << "发病了" << endl;
        delete first;
        delete second;
        delete third;
    }
    void Printname()
    {
        cout << first << " " << second << " " << third << endl;
    }
};
class Person
{
private:
    Name n;
    string sex;
    string national;
public:
    Person(Name a, string sex, string national) :n(a), sex(sex), national(national)
    {
        cout << "构造完成!" << endl;
    }
    void printName()
    {
        n.Printname();
    }
    void printNational()
    {
        cout << national << endl;
    }
};

int main()
{
    Name name("比利王", "搞比利", "大xx");
    Person s(name, "男", "日暮里");
    s.printName();
    s.printNational();
}

那问题出在哪里呢?
在那个被我删掉的复制构造函数体里面 新建Person对象时使用了其构造函数,这时候我们是使用对象name来为Person中n赋值的,这使得无论是传递给构造函数参数还是用name初始化n都调用了复制构造函数,而char*的默认复制是值传递。也就是你只是复制了指针的内容 并没有重新开辟内存
于是 在形参name传递给n之后 name被回收 调用析构函数 此时你的三个指针指向的内容已经没有了。

修改之后,使用strcpy_s来安全拷贝字符串:

#include<iostream>
#include<ctime>
#include<fstream>
#include<string>
#include<stack>
#include<vector>
#include<map>
using namespace std;
class Name {
private:
   char* first;
   char* second;
    char* third;

public:
    Name(string f = "", string s = "", string t = "")
    {
        first = new char[f.length() + 1];
        second = new char[s.length() + 1];
        third = new char[t.length() + 1];
        strcpy_s(first, f.length() + 1, f.c_str());
        strcpy_s(second, s.length() + 1, s.c_str());
        strcpy_s(third, t.length() + 1, t.c_str());
    }
    Name(Name& name)
    {
        cout << "调用复制构造函数" << endl;
        int length1 = strlen(name.first);
        int length2 = strlen(name.second);
        int length3 = strlen(name.third);
        first = new char[length1+1];
        second = new char[length2+1];
        third = new char[length3+1];
        strcpy_s(first, length1+1,name.first);
        strcpy_s(second, length2+1,name.second);
        strcpy_s(third,length3+1,name.third);
    }
    ~Name()
    {
        cout << "发病了" << endl;
        delete first;
        delete second;
        delete third;
    }
    void Printname()
    {
        cout << first << " " << second << " " << third << endl;
    }
};
class Person
{
private:
    Name n;
    string sex;
    string national;
public:
    Person(Name a, string sex, string national) :n(a), sex(sex), national(national)
    {
        cout << "构造完成!" << endl;
    }
    void printName()
    {
        n.Printname();
    }
    void printNational()
    {
        cout << national << endl;
    }
};

int main()
{
    Name name("比利王", "搞比利", "大xx");
    Person s(name, "男", "日暮里");
    s.printName();
    s.printNational();
}

或者使用深拷贝函数:


#include <string>
 
void string2char(std::string src, char *dest) {
    memcpy(dest, src.c_str(), strlen(src.c_str()));
}
 
int main() {
    std::string str = "10.66.38.214:1522/orcl";
    char szDest[256] = { 0 };
 
    string2char(str, szDest);
}

c_str():生成一个const char*指针,指向以空字符终止的数组。string–>char*

参考链接:
1.C++ VS提示未加载 wntdll.pdb
2. c++中c_str()的用法详解

vs2019出现“不包括wntdll.pdb”错误 vs2019出现“不包括wntdll.pdb”错误 错误提示 出错代码 //栈的顺序存储表示 typedef struct { SElemType* top; //栈顶指针,指向栈顶元素的后一个位置 SElemType* base; //栈底指针,在栈构造之前和销毁之后,base 的值为 NULL int stacksize; //当前已分配的存储空间,以元素为单位(当前可使用的最大容量) }SqStack; //栈的初始化(构造一个空栈) Status InitStack(SqStack&am 阅读详情

相关推荐

未加载 ntdll.pdb的可能错误原因

未加载 ntdll.pdb的可能错误原因 曾经运行的时候出现过这个问题,后来发现自己new一个数组的时候写成了 int *data = new int(MAX_SIZE),然后delete []data。 这样在对data[i]进行操作的时候有时候会出现这个错误或者触发断点。 我的vs报错代码: if( u && CV_XADD(&u->refco...

jacke121的专栏 1万+

VS程序运行时出现未加载wntdll.pdb错误的原因及解决办法---亲测十分有效

vs报错时出现的内容 原因一: 程序中的指针指向越界。 解决方案: 取消指针对非法地址的指向。 原因二: 试图对非 new 申请的内存用 delete 进行释放,只有用new申请的内存才能用 delete 来释放,其他只能由系统自动释放。 解决方案: 删除释放该内存的 delete 语句。 例如: struct PCB { string procsess_name;//进程名 int arrival_time;//进程到达时间 }; int main() { PCB first_n

weixin_43965705的博客 1万+

腾讯、飞书等在线表格自动化编辑--python

在线文档自动化处理数据

qq_32828053的博客 2万+

VS编译器BUG分享 【未加载 wntdll.pdb】

今早写链表的代码时,出现了未加载 wntdll.pdb这样一个问题。此贴将总结出现这类问题的原因和解决方法。(不断更新) 先上图: 出现这个异常,基本和堆区的重复内存释放没跑。 情况一:深拷贝与浅拷贝 如果一个类的成员变量,是开放在堆区的, 那么我们必须要重载拷贝构造函数。 因为默认的拷贝构造函数是浅拷贝,只是单纯的赋值。 举个例子来讲解: class Person { public: int* age; Person(int age) { this->age = n

Kukeoo的博客 3948

量化回测框架三选一:Backtrader、Zipline、PyAlgoTrade,新手到底该跟谁学?

本文对比分析了三大量化回测框架Backtrader、Zipline和PyAlgoTrade,帮助新手选择最适合的入门工具。从安装配置、策略编写到文档查阅,详细解析各框架的特点和适用场景,为量化交易初学者提供实用指南。

weixin_28745309的博客 267

《uni-app 长列表优化:虚拟列表(vue-virtual-scroller)解决 1000+ 数据渲染卡顿》(附虚拟列表封装与多端适配)

本文详细介绍了虚拟列表技术在前端长列表渲染中的优化方案。针对传统v-for渲染导致的性能问题(内存占用高、渲染阻塞、滚动卡顿),提出基于vue-virtual-scroller的虚拟列表解决方案,通过可视区域渲染和DOM复用实现性能突破。文章包含核心原理、组件封装、多端适配及性能对比,并给出常见问题的解决方法。实践表明,该方案可将1000条数据的首次渲染时间从3800ms降至420ms,滚动FPS提升至55帧,显著改善用户体验。

qq_59041750的博客 2107

【c++】类模版.exe 已触发了一个断点 和 未加载wntdll.pdb

今天用VS2015的时候遇到了这样一个问题 点击中断之后,又出现了这样的问题 查了一下,发现都是说指针越界以及new了空间之后没有delete 认真检查了我的代码,发现并没有上述情况,但是我的构造函数是这样写的 //1、有参构造函数 MyArray(int capacity):m_Capacity(capacity),m_Size(0),pAddress(new T[m_Capacity]) { } private: T* pAddress; //指针指向堆区

StudyWinter的博客 881

利用CiteSpace实现知网专利文献的高效计量与可视化分析

本文详细介绍了如何利用CiteSpace软件对中国知网(CNKI)的专利文献进行高效的文献计量与可视化分析。文章提供了从数据获取、格式转换、参数设置到图谱解读的完整工作流,旨在帮助研究者快速掌握该工具,从而洞察技术领域的研究热点、核心机构、学者合作网络及发展趋势,提升专利情报分析效率。

weixin_28520495的博客 292

下面的框架可能不正确和或缺失,没有为 ntdll.dll 加载符号报错

[下面的框架可能不正确和/或缺失,没有为 ntdll.dll 加载符号] 未知 在写图代码时遇见这个错误,仔细查找了,原来是 m_pMatrix = new int[m_iCapacity]; //初始化内部数据 将所有成员设置为0 memset(m_pMatrix, 0, m_iCapacity*m_iCapacity * sizeof(int)); 申请内存申请少了 修改后 m_pM...

小青头的博客 2万+

BUUCTF reverse题解汇总

BUUCTF平台刷题过程中做的一些逆向题解的总结归类

于高山之巅,方见大河奔涌;于群峰之上,更觉长风浩荡。 1万+

【windows】【系统还原】亦是美kms执行一键关闭defender 之后,windows defender 被卸载了,无论如何都打不开

还是执行 都没有明显效果 那么,我最后是怎么解决得呢? 一、打开控制面板(任务栏搜索kzmb)

weixin_41899098的博客 6901

未加载的ntdll.pdb错误

和同事一起开发的同一份程序,原来在笔记本上开发,我们两个布的环境都是一样的,而且都没有问题,然后换到了另外的台式机,我们的台式电脑都是一样的配置,布的环境也是一样的,但是我的就是不行,编译通过,然后Debug模式下的到最后就报这个错误,但是换成release模式下可以运行通过。后来公司更新了系统,就可以跑了,这验证了我的想法,就是系统本身的问题。

Dein_Vater的博客 4099

华为OD机试双机位C卷-部门人力分配 (Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【部门人力分配】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 部门人力分配。

qq_45776114的博客 1872

【Visual Studio 报错】未加载 wntdll.pdb(一种可行的解决办法)

使用 VS 调试程序时出现的错误

从不依靠,从不寻找,非常沉默,非常骄傲。 你必须非常努力,才能看起来毫不费力。 1763

Claude Code 安装指南(Windows / macOS)

本文介绍了Claude Code的安装准备和基本流程。作为开发者工具,安装前需具备命令行操作能力、可用的Claude账号和稳定网络环境。Windows和macOS的安装都需通过终端完成,安装后以命令行形式运行。首次使用建议在熟悉项目中执行简单任务,逐步建立使用习惯。强调安装只是开始,后续需学习如何有效使用工具,包括任务提交流程和上下文提供方法。核心要点是:Claude Code是开发者工具,网络和终端环境是关键,建议先运行再深入理解。

sg_knight的专栏 4482

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

项目导入自定义的动态库编译时报未加载ntdll.pdb错误

未加载ntdll.pdb 主要是因为链接动态库时,Debug模式链接成了Release,Release模式链接成Debug(如项目链接了动态库)当项目从Debug模式转为Release模式编译时,此时需要将动态库的Debug文件路径换成Release路径,不然编译时会报ntdll.pdb错误如下:

qq_45524532的博客 2054

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

vs编译出现未加载 wntdll.pdb可能的原因

vs编译出现未加载 wntdll.pdb可能的原因1、用malloc没有用free2、free中的指针位置错误 1、用malloc没有用free 2、free中的指针位置错误 下面展示一些 内联代码片。 int* i = (int*)malloc(sizeof(int) * 4); int* j = (int*)malloc(sizeof(int) * 4); if (i == NULL || j == NULL) return 0; for (int a=0;a<3;a++) {

恕己1的博客 3074

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VS错误:未加载wntdll.pdb的一种可能

出现未加载wntdll.pdb大概率是指针使用错误,比如使用野指针、越界访问等。保险起见,应该使用delete[] 释放堆区数组空间。

qq_43028291的博客 1943

[下面的框架可能不正确和/或缺失,没有为 ntdll.dll 加载符号]

![```cpp 在这里插入代码片 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201122123259808.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUwNTE4MTQx,size_16,color_FFFFFF,t_70#pic_center) ![在这里插入图片描述](https://i

m0_50518141的博客 2764

c语言中ntdll.dll,c – ntdll.dll [下面的框架可能不正确/缺失,没有为ntdll.dll加载符号]...

几个星期以来,我遇到了这种情况,非常令人沮丧,我的程序调试非常好,没有错误,当我运行程序时,它执行的初始部分作业,几秒后它终止到’break continue’选项,并在调用堆栈中看一看,结果证明它是来自ntdll.dll和msvcr100d.dll的错误它似乎与Windows相关的SDK问题,它似乎也是一个糟糕的指针.我无论如何都无法控制这一点.我安装了Windows SDK到7.0但似乎没有任...

weixin_42476061的博客 2500

c++未加载ntdll.pdb_小程序加载性能优化实践

前言对于互联网产品来说,第一印象就是应用的启动速度。虽然启动足够快时用户不会有很大的感知,但是如果慢就会被发现就会被挑战,总结来说,快就是应该的。而应用的启动速度优化,又可以分成首次启动速度优化和二次启动速度优化。对于不同的类型,对应的优化方案也是截然不同的。要如何确定优化方向以及优先级呢,这就要从具体的业务场景出发。业务场景但凡不谈业务场景就直接谈优化都是不够专业的。本次优化实践主要是依托在微保...

weixin_39665847的博客 362
上一篇: matlab中对文件的操作总结
下一篇: opencv中加速的一些操作
dlvector
博客等级 码龄10年 85粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值