私はfedora 14でいくつかの低レベルのCコードを書いていましたが、このコードに夢中になりました。最初の配列は「0」に初期化されていませんが、2 番目の配列は初期化されています。gdb を数回使用しましたが、魔法のようです。何が起こっている?
const int maxsize=100000;
char num[7];
char tnum[6];
int pos=0;
while(pos<(maxsize+1)) {
int c=0;
int j=0;
int myindex;
int tindex;
for(myindex=0;myindex<7;myindex++) num[myindex]='0';
for(tindex=0;tindex<6;tindex++) tnum[tindex]='0';
//....
}
gdb
と の両方でp num
、の内部に配列値を出力p tnum
しp num[0]
ましp tnum[0]
た。また、プレーン0として初期化しようとしましたが、同じことが起こります。
ここにデバッガの出力があります
Temporary breakpoint 1, main () at inversionscount.c:3
3 int main() {
Missing separate debuginfos, use: debuginfo-install glibc-2.13-1.i686
(gdb) s
5 const int maxsize=100000;
(gdb) s
6 int startarray[maxsize];
(gdb) s
14 int pos=0;
(gdb) s
15 while(pos<(maxsize+1)) {
(gdb) s
19 int c=0;
(gdb) s
20 int j=0;
(gdb) s
24 for(myindex=0;myindex<7;myindex++) num[myindex]='0';
(gdb) s
25 for(tindex=0;tindex<6;tindex++) tnum[tindex]='0';
(gdb) s
27 while( c=getchar()!="\n") {
(gdb) p num
$1 = "\370\377\277\270\367\377"
(gdb) p tnum
$2 = "000000"
(gdb)