记录一个i变量引发的事故
概述
近期开发中遇到一个特别的问题,觉得很有必要与你下来。就是由于在开发中一个很小的疏忽,导致了很大的问题,是什么呢?
现象
我的程序突然引发了v8内部的错误,提示都是c++的,如下。程序一启动就直接崩溃。没有任何错误提示。
#
# Fatal error in , line 0
# Fatal JavaScript invalid size error 195652814
#
#
#
#FailureMessage Object: 0x7ffd9ac17dd0
1: 0xb76401 [node]
2: 0x1c09824 V8_Fatal(char const*, ...) [node]
3: 0xe7dd5e [node]
4: 0xff5168 [node]
5: 0x1007649 [node]
6: 0x11ed9f3 v8::internal::Runtime_GrowArrayElements(int, unsigned long*, v8::internal::Isolate*) [node]
7: 0x15f20b9 [node]
Trace/breakpoint trap
如果放在平时,估计直接崩溃了,重装系统都有可能。比较幸运的是,在出现此错误和正常运行时,我只改了少量的代码。我觉得问题可能是出现这些代码上,就仔细比对了这些代码。结果还真发现了问题。
for (let i = 0; i < res.data.items.length; i++) {
const info = objectHelper.cloneDeepJsonParse(res.data.items[i])
if (info.property.detailModulOfFree == undefined) info.property.detailModulOfFree = []
for (let j = 0; j < info.property.detailModulOfFree.length; j++)
info.property.detailModulOfFree[j] = parseInt(info.property.detailModulOfFree[j])
if (info.property.detailModulOfPromote == undefined) info.property.detailModulOfPromote = []
for (let j = 0; j < info.property.detailModulOfPromote.length; j++)
info.property.detailModulOfPromote[j] = parseInt(info.property.detailModulOfPromote[j])
const topic: any = {
id: info.id,
}
for (let j = 0; j < info.children.length; j++) {
const child = info.children[j]
child.property.topicType = child.property.topicType == undefined ? 1 : child.property.topicType
if (child.property.detailModulOfFree == undefined) child.property.detailModulOfFree = []
for (let k = 0; k < child.property.detailModulOfFree.length; k++)
child.property.detailModulOfFree[k] = parseInt(child.property.detailModulOfFree[k])
if (child.property.detailModulOfPromote == undefined) child.property.detailModulOfPromote = []
for (let k = 0; k < child.property.detailModulOfPromote.length; k++)
child.property.detailModulOfPromote[k] = parseInt(child.property.detailModulOfPromote[k])
if (child.property.detailModulOfVip1 == undefined) child.property.detailModulOfVip1 = []
for (let k = 0; i < child.property.detailModulOfVip1.length; k++)
child.property.detailModulOfVip1[k] = parseInt(child.property.detailModulOfVip1[k])
if (child.property.detailModulOfVip2 == undefined) child.property.detailModulOfVip2 = []
for (let k = 0; k < child.property.detailModulOfVip2.length; k++)
child.property.detailModulOfVip2[k] = parseInt(child.property.detailModulOfVip2[k])
上面是部分代码,大家能发现问题吗?
我公布一下答案

这里谅是K的,错误的写成了i,这个i是外层的一个for循环变量。
总结
- 写代码一定要认真,相信没有最好,只有更好。
- 尽量不要使用for,建议使用foreach。减少i,j,k这样的变量使用。降低错误的风险。
记录一个i变量引发的事故的更多相关文章
- 一个purge参数引发的惨案——从线上hbase数据被删事故说起
在写这篇blog前,我的心情久久不能平静,虽然明白运维工作如履薄冰,但没有料到这么一个细小的疏漏会带来如此严重的灾难.这是一起其他公司误用puppet参数引发的事故,而且这个参数我也曾被“坑过”. ...
- php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性)
php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性) 一.总结 链表反转两 ...
- 【深入浅出.Net IL】1.一个For循环引发的IL
.Net底层剖析目录章节 1.[深入浅出.Net IL]1.一个For循环引发的IL 2.[.Net底层剖析]2.stfld指令-给对象的字段赋值 3.[.Net底层剖析]3.用IL来理解属性 1.准 ...
- 一次单片机 SFR 页引发的“事故”
一次单片机 SFR 页引发的"事故" 现象 需要使用单片机的 ADC 功能,在对 ADC 初始化后,根据内部分的 IVREN 计算出 VDD 的电压值 . 在读取时一直显示 ADC ...
- Spring 循环引用(一)一个循环依赖引发的 BUG
Spring 循环引用(一)一个循环依赖引发的 BUG Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring 循环 ...
- 记go中一次http超时引发的事故
记一次http超时引发的事故 前言 分析下具体的代码实现 服务设置超时 客户端设置超时 http.client context http.Transport 问题 总结 参考 记一次http超时引发的 ...
- 八大排序算法~简单选择排序【记录下标k变量的作用】
八大排序算法~简单选择排序[记录下标k变量的作用] 1,思想:打擂台法,数组中的前n-1个元素依次上擂台"装嫩",后边的元素一个挨着一个不服,一个一个上去换掉它 2,优化:通过记录 ...
- DELPHI声明一个指针变量,什么时候需要分配内存,什么时候不需要分配内存?
DELPHI声明一个指针变量,什么时候需要分配内存,什么时候不需要分配内存?比如我定义个变量 var p:Pchar;如果这个变量声明为全局变量,需要分配内存吗?分配为局部变量,需要分为内存吗?为什么 ...
- 第一个CSS变量:currentColor
一.基本介绍 CSS变量正慢慢地从最初的草案到浏览器实现.但规范中有个已经存在多年的变量:currentColor.这个CSS特性具有良好的浏览器支持和一些实际的应用,本篇文章,我们来学习和了解它. ...
随机推荐
- 【原创】项目三Raven-2
实战流程 1,C段扫描,并发现目标ip是192.168.186.141 nmap -sP 192.168.186.0/24 扫描目标主机全端口 nmap -p- 192.168.186.141 访问8 ...
- 6. Docker-compose配置Dockerfile使用
Docker-compose实际是管理基于一个镜像启动的容器的. 使用docker-compose.yml文件以及Dockerfile文件在生成自定义镜像的同时启动当前镜像,并且由docker-com ...
- c++ 辗转相除(动图)
#include<iostream> #include<cstdio> #include<iomanip> #include<cstring> usin ...
- C#和Java,究竟选哪个方向?我只说事实,你自己分析……
好久没到园子里面逛了,回来看了看,.NET有点式微呀?Java/Spring/Linux--比以前多了很多,为什么?博客园可是.NET的大本营了呀! 好吧,我承认,飞哥也动摇了,去年在ASP.NET的 ...
- 快速 IO
IO 的进化史 cin和cout 刚开始学的时候,老师叫我们用 cin 和 cout 大概是因为这最简单吧 cin>>x; cout<<x scanf和printf 学到函数了 ...
- Dubbo的基本使用
Dubbo分为提供者和消费方 并且两者都要注册到ZK上 提供者 注解 @Service 这是dubbo包下的 消费组 注解 @Reference 远程注入 第一步导入依赖 <! ...
- 论文解读(MGAE)《MGAE: Masked Autoencoders for Self-Supervised Learning on Graphs》
论文信息 论文标题:MGAE: Masked Autoencoders for Self-Supervised Learning on Graphs论文作者:Qiaoyu Tan, Ninghao L ...
- JS:三目运算符
语法:条件表达式?表达式1:表达式0 注:当条件表达式为true则选择表达式1,反之false则选择表达式0 例: var a = 0; var b = 1; re=a>b?a:b consol ...
- Canal实现MySQL协议
目录 代码流程 执行dump前 执行dump 在学习Canal的时候很好奇Canal是如何模拟成MySql Slave来接收数据的 MySql Slave会向主库发送dump协议来接收bin-log数 ...
- 实现一个Prometheus exporter
Prometheus 官方和社区提供了非常多的exporter,涵盖数据库.中间件.OS.存储.硬件设备等,具体可查看exporters.exporterhub.io,通过这些 exporter 基本 ...