概述

近期开发中遇到一个特别的问题,觉得很有必要与你下来。就是由于在开发中一个很小的疏忽,导致了很大的问题,是什么呢?

现象

我的程序突然引发了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循环变量。

总结

  1. 写代码一定要认真,相信没有最好,只有更好。
  2. 尽量不要使用for,建议使用foreach。减少i,j,k这样的变量使用。降低错误的风险。

记录一个i变量引发的事故的更多相关文章

  1. 一个purge参数引发的惨案——从线上hbase数据被删事故说起

    在写这篇blog前,我的心情久久不能平静,虽然明白运维工作如履薄冰,但没有料到这么一个细小的疏漏会带来如此严重的灾难.这是一起其他公司误用puppet参数引发的事故,而且这个参数我也曾被“坑过”.   ...

  2. php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性)

    php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性) 一.总结 链表反转两 ...

  3. 【深入浅出.Net IL】1.一个For循环引发的IL

    .Net底层剖析目录章节 1.[深入浅出.Net IL]1.一个For循环引发的IL 2.[.Net底层剖析]2.stfld指令-给对象的字段赋值 3.[.Net底层剖析]3.用IL来理解属性 1.准 ...

  4. 一次单片机 SFR 页引发的“事故”

    一次单片机 SFR 页引发的"事故" 现象 需要使用单片机的 ADC 功能,在对 ADC 初始化后,根据内部分的 IVREN 计算出 VDD 的电压值 . 在读取时一直显示 ADC ...

  5. Spring 循环引用(一)一个循环依赖引发的 BUG

    Spring 循环引用(一)一个循环依赖引发的 BUG Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring 循环 ...

  6. 记go中一次http超时引发的事故

    记一次http超时引发的事故 前言 分析下具体的代码实现 服务设置超时 客户端设置超时 http.client context http.Transport 问题 总结 参考 记一次http超时引发的 ...

  7. 八大排序算法~简单选择排序【记录下标k变量的作用】

    八大排序算法~简单选择排序[记录下标k变量的作用] 1,思想:打擂台法,数组中的前n-1个元素依次上擂台"装嫩",后边的元素一个挨着一个不服,一个一个上去换掉它 2,优化:通过记录 ...

  8. DELPHI声明一个指针变量,什么时候需要分配内存,什么时候不需要分配内存?

    DELPHI声明一个指针变量,什么时候需要分配内存,什么时候不需要分配内存?比如我定义个变量 var p:Pchar;如果这个变量声明为全局变量,需要分配内存吗?分配为局部变量,需要分为内存吗?为什么 ...

  9. 第一个CSS变量:currentColor

    一.基本介绍 CSS变量正慢慢地从最初的草案到浏览器实现.但规范中有个已经存在多年的变量:currentColor.这个CSS特性具有良好的浏览器支持和一些实际的应用,本篇文章,我们来学习和了解它. ...

  10. Mysql中where条件一个单引号引发的性能损耗

    日常写SQL中可能会有一些小细节忽略了导致整个sql的性能下降了好几倍甚至几十倍,几百倍.以下这个示例就是mysql语句中的一个单引号('')引发的性能耗损,我相信很多朋友都遇到过,甚至还在这样写. ...

随机推荐

  1. ORACLE推导参数Derived Parameter介绍

    Oracle的推导参数(Derived Parameters)其实是初始化参数的一种.推导参数值通常来自于其它参数的运算,依赖其它参数计算得出.官方文档关于推导参数(Derived Parameter ...

  2. 使用UITableView的分组样式

    分组样式顾名思义是对TableView中的数据行进行分组处理,每个分组都有一个header和footer. TableView中header的英文文本是大写的,footer的英文文本是小写的.如下图浅 ...

  3. Linux下 RabbitMQ的安装与配置-3

    一  Erlang安装 1.RabbitMQ是基于Erlang的,所以首先必须配置Erlang环境. 从Erlang的官网http://www.erlang.org/download.html 下载最 ...

  4. Oracle数据库对象_同义词

    同义词是一种数据库对象,它是为一个数据库对象定义的别名,使用同义词的主要目的是为了简化SQL语句的书写. 同义词的概念和类型 利用同义词可以为用户的一个对象,或者其他用户的一个对象定义别名,从而简化命 ...

  5. Codeforces Round #131 (Div. 2) : B

    首先能被2,5整除的数结尾必须是0: 如果没有0肯定不行: 然后判断他们的和ans%3: 如果==0,直接从大到小输出就行: 如果==1,要么删除它们之间最小的那个%3==1的,要么删除两个小的并且% ...

  6. HDU_2055——刷题不要使用fflush()

    Problem Description we define f(A) = 1, f(a) = -1, f(B) = 2, f(b) = -2, ... f(Z) = 26, f(z) = -26; G ...

  7. [Swift]LeetCode763. 划分字母区间 | Partition Labels

    A string S of lowercase letters is given. We want to partition this string into as many parts as pos ...

  8. org.hibernate.ObjectNotFoundException: No row with the given identifier exists

    维护老系统时出现的问题,出现的原因我简述一下: table1与table2是关联表,T1中有T2的主键 "T1_id",当T1中的 "T2_id" 不为null ...

  9. vue公共

    1 需求:在做项目的过程中发现,有一些功能是公共的,于是就想把这些公共的功能抽出来,做成独立的模块,别的项目需要用到,直接引用这个模块 2 问题: 前端:1 是用vue做的,vue的跳转是通过rout ...

  10. @RequestParam 和@RequestBody 的区别?

    @RequestParam用来接收: 1 用来处理简单的参数绑定 2 用来接收 Content-Type 是   application/x-www-form-urlencoded (这种格 式的数据 ...