run time error 与compile time error区别

本文详细解析了编译时与运行时的概念,并通过具体的示例代码展示了两种不同阶段可能发生的错误类型及其原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

run time即运行时.
解释:
程序"运行时"即是程序被编译了之后,打开程序并运行它直到程序关闭退出这段时间.经常说到的"运行时错误",即是指程序在打开并执行里面的代码时发生的错误.
造成运行时错误的原因有很多,不过大多数是因为程序在最初设计时的代码没有写正确而留下的隐患.比如说下面的代码,能通过编译(编译时),但在运行时会出现错误.
int * p;
p=NULL;
*p = 123;
上面的*p = 123;这一句会发生运行时错误,但编译时却不会发生错误.因为上面的代码没有任何语法错误,所以在编译时不会发生任何错误;但在运行时,由于p为一指向地址零的指针,当向地址零进行写操作时,由于地址零受操作系统保护,所以会发生一个运行时的内存非法访问的错误.在WINDOWS下面,并不是所有的4GB的地址空间我们都可以进行访问.有很多地址是被操作系统保护的.

compile time即为编译时:
解释:
准确的说编译时是指我们写好的源代码在被编译成为目标文件(OBJ)这段时间.但我们可以通俗的看成是我们写好的源代码在被转换成为最终可执行的文件这段时间.
通常提到编译时错误是指编译器在将我们已经写好的源代码,转换成为目标文件时发生的错误,这类错误大多是语法错误,也即是我们没有按照编译器能够认识的格式书写源代码造成的.如下面的代码会发和编译时错误:
int a;
a = NULL
*a = 1000;
其中a=NULL这一句将发生编译时错误,原因是由于这一句少了一个分号;编译器无法理解这一句的意思,所以就会发生编译时错误了
### 解决 Vue CLI Webpack 多个资源生成相同文件名 `index.html` 导致的编译冲突 在使用 Vue CLI 创建并构建项目的过程中,可能会遇到如下错误提示:“Conflict: Multiple assets emit different content to the same filename index.html”。此问题通常发生在打包阶段,当有多个入口点试图写入同一个 HTML 文件时发生。 #### 错误分析 该错误的根本原因是配置不当或插件设置不合理造成的。具体来说,在多页面应用或多入口场景下,如果不同模块都尝试输出到相同的HTML文件路径,则会触发此类冲突警告[^3]。 #### 解决策略一:调整 HtmlWebpackPlugin 配置 对于单页应用程序 (SPA),默认情况下只有一个 `HtmlWebpackPlugin` 实例负责生成 `index.html` 文件。但如果存在额外的手动定义或者第三方库也注册了自己的实例,则可能导致重复输出。此时应检查 `vue.config.js` 中关于 `HtmlWebpackPlugin` 的自定义配置部分: ```javascript module.exports = { chainWebpack: config => { // 移除多余的html-webpack-plugin实例 config.plugins.delete('html'); // 添加新的唯一html-webpack-plugin实例 config.plugin('html').use(require('html-webpack-plugin'), [{ template: path.resolve(__dirname, './public/index.html'), chunks: ['app'], // 明确指定关联的chunk名称 inject: true, minify: process.env.NODE_ENV === 'production' ? { collapseWhitespace: true } : false }]); }, }; ``` 通过这种方式可以确保只保留一个有效的 `HtmlWebpackPlugin` 插件来处理最终的 `index.html` 输出[^1]。 #### 解决策略二:修改文件命名规则 另一个常见的解决方案是在开发环境中更改输出文件的名字模式,防止它们覆盖彼此的内容。可以在 `vue.config.js` 或者 `.env.*` 环境变量文件里设定不同的模板参数给各个页面使用的 `HtmlWebpackPlugin` 使用独立的文件名: ```javascript // vue.config.js const pages = require('./src/pages'); // 假设有一个pages对象描述了各页面的信息 module.exports = { pages: Object.keys(pages).reduce((acc, pageName) => ({ ...acc, [pageName]: { entry: `./src/${pageName}/main.ts`, // 对应于每个页面的实际entry point位置 template: `./public/${pageName}.html`, title: `${pageName} Page Title`, chunks: ['chunk-vendors', 'chunk-common', pageName], }, }), {}), }; ``` 上述代码片段展示了如何基于动态加载的方式为每一个单独的页面分配唯一的 `template` 和 `title` 属性值,从而避免了所有页面共享同一份基础模板而引起的潜在冲突风险[^5]。 #### 解决策略三:清理缓存重新安装依赖包 有时本地环境中的某些残留数据也可能引发这类问题。因此建议执行以下命令清除node_modules以及package-lock.json后再重试: ```bash rm -rf node_modules package-lock.json && npm install ``` 这一步骤有助于排除因版本不一致或其他未知因素引起的问题[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值