Coding的痕迹

一位互联网奔跑者的网上日记

0%

(原) C 找出本段代码中隐含的错误(2个)

在学习二维数组的动态分配,写出了以下代码,怎么捣鼓也不对,总算想通了。写于此,分享一下。答案在后面,白底白字(已修改)。在不上机调试的情况下,能找出来吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
//#include <string.h>

int main()
{
char* a[10];
int i = 0;

for (; i < 10; i++)
{
a[i] = new char[20];
}

for (; i < 10; i++)
{
for(int j = 0; j < 20; j++)
{
a[i][j] = '1';
}

}

for (; i < 10; i++)
{
printf("%s\n", a[i]);
}

for (; i < 10; i++)
{
delete[] a[i];
}
return 0;
}

1,后面for循环的初始值变量没有赋值,执行过第一个循环后,i == 10,不符合循环条件,跳过,后面循环亦是如此。
2,a[ i ][ j ] = '1',且 j019,其后面没有'\0',输出时,你懂的。
这个错误给了我一个教训啊。