首页 > 试题广场 >

处理a.html文件时,以下哪行伪代码可能导致内存越界或者抛

[单选题]
处理a.html文件时,以下哪行伪代码可能导致内存越界或者抛出异常()
         int totalBlank = 0;
         int blankNum = 0;
         int taglen = page.taglst.size();
A       for(int i = 1; i < taglen-1; ++i)
        {
                 //check blank
B             while(page.taglst[i] == "<br>" && i < taglen)
               {
C                       ++totalBlank;
D                       ++i;
               }
E             if(totalBlank > 10)
F                      blankNum += totalBlank;
G             totalBlank = 0;
        }
注意:以上代码中taglen是html文件中存在元素的个数,a.html中taglen的值是15,page.taglst[i]取的是a.html中的元素,例如page.taglst[1]的值是<html>
a.html的文件如下:
<html>
<title>test</title>
<body>
<div>aaaaaaa</div>
</body>
</html>
<br>
<br>
<br>
<br>
<br>
  • A
  • B
  • C
  • D
  • E
  • F
  • G
推荐
答案为B,因为while(page.taglst[i] == "<br>" && i < taglen)这个判断,先执行page.taglst[i] == "<br>"这个判断,如果这个判断返回值为true,再执行i < taglen这个判断。当i=taglen的时候,执行page.taglst[i] == "<br>"这个判断就会越界,所以B处,最先出现越界
编辑于 2016-04-04 21:18:37 回复(32)
怎么c++的题放到html里
发表于 2017-02-18 01:00:42 回复(1)
i等于taglen时,for循环已经不会执行了,怎么还会执行里面的while循环呢
发表于 2017-07-12 00:35:01 回复(1)
很简单,这么去想:
当i=taglen-2时,进入while循环,由题设条件,page.taglst[i]=="<br>"成立,i<taglen也成立,故循环条件成立
此时,i++,i=taglen-1,注意此时i已超出for循环范围,但只涉及到i值,不会内存越界,再次进入while循环判断条件page.taglst[i]=="<br>";此时取值page.taglst[i]便会超出数组内存
发表于 2020-04-23 13:02:58 回复(0)
应先检查索引是否越界,在进行数组元素操作
发表于 2016-08-25 10:30:40 回复(0)
for循环那里应该是i<taglen吧?
元素总共15个,taglen是15,A处的循环既然从1开始,应该是i<=taglen吧?
发表于 2016-08-12 21:06:52 回复(2)
我觉得这里应该不是从越界分析,应该从是否会抛出异常分析吧,我觉得是page.taglst[i] == "<br>"里的“==”运算符真能这么用的问题
发表于 2016-08-08 20:39:46 回复(1)
答案为B,因为while(page.taglst[i] == "<br>"  && i < taglen)这个判断,先执行 page.taglst[i] == "<br>"这个判断,如果这个判断返回值为true,再执行i < taglen这个判断。当i=taglen的时候,执行page.taglst[i] == "<br>"这个判断就会越界,所以B处,最先出现越界。把&&左边和右边位置调换一下就对了。
发表于 2015-08-31 21:37:39 回复(1)
#include<iostream>
using namespace std;
int main()
{
	char a[6] = { '1','2','d',',',',',',' };
	for (int i = 1; i < 5; i++)
	{
		cout << i;
		while (a[i]==','&&i <6)
		{
			cout << i;
			i++;
			cout << endl;
		}
	}
	return 0;
}

当i=3时开始进入while循环,while循环内部i++,直到最后执行一次i++,i=6,此时判断a[6]==',',(a[6]不是应该已经越界了吗,但是为什么程序没有报错呢,是因为数组不进行边界检查,所以编译器就忽略了吗?),显然while表达式的值为假,跳出while循环,此时i=6,外层for循环不执行,程序结束。
显然,我们可以在写程序是把while循环写为while(i<6&&a[i]==','),这样就避免了数组的越界。

发表于 2019-10-20 11:27:28 回复(0)
问一个**的问题,js中taglst是什么😗
发表于 2019-04-24 19:06:21 回复(0)
这题是css题目?黑人问号
发表于 2018-09-25 13:11:18 回复(0)
题干改为page.taglst[0]的值是<html>才有正解,page.taglst的下标范围是0~(taglen-1)
while循环体里i最大取到taglen,这时候访问page.taglst[i]进行判断时会越界
编辑于 2019-06-11 18:04:23 回复(1)
这个题也是逗 问你哪行导致的当然是D  所有选项也只有B访问了内存 出错的地方肯定是B啊  这个问法有问题吧
发表于 2017-08-19 17:12:26 回复(0)
跟while条件判断顺序有关。若先执行比较语句page.taglst[i] == "<br>",则此时可能已经超出了数组的范围,即内存越界了。所以应该先进行i的大小判断,若此时条件不成立,也就不会再执行后面的其他并列条件了(&&)。
发表于 2015-05-12 21:22:58 回复(0)
把&&左边和右边位置调换一下就对了
发表于 2015-04-02 12:22:46 回复(3)
题目要找出“能导致内存越界或者抛出异常 ”部分,出现问题的,要么是数组要么是指针,只有B符合
发表于 2017-06-30 11:08:54 回复(1)
越界错误只会发生在访问数组时只有B在访问数组
发表于 2022-02-19 17:27:56 回复(0)
 
for(inti =1; i < taglen-1; ++i)
{
 //check blank
 while(page.taglst[i] =="<br>"&& i < taglen)
 {
  ++totalBlank;
  ++i;             
}
 if(totalBlank >10)
   blankNum += totalBlank;
 totalBlank =0;
}
/* 假设taglst从1开始,1为<html>标签, 11到15为<br>标签。 当for循环遍历到i=11时,11 < 15-1=14 page.taglst[11] == "<br> 为true, 短路与继续判断后面的表达式,11 < 15也为true,执行while循环 ++i, i=12, 满足条件继续执行while ++i, i=13, ++i, i=14, ++i, i=15, 当i=15时,page.taglst[15] == "<br>" 为true, 15<15为false,while循环终止 15<15-1=14? 不满足条件,for循环终止,程序没问题。 */

编辑于 2021-12-12 14:07:34 回复(0)
逻辑 判断的 顺序      判断会导致越界问题

发表于 2021-09-12 14:58:15 回复(0)
直接判断有数组操作的地方即可, 选项中只有B
发表于 2021-04-20 17:45:34 回复(0)
送分题,除了数组访问,那个还能越界抛出异常,难道是加法?
发表于 2020-11-06 22:10:37 回复(0)