次のコードを検討してください。
FILE *input;
FILE *output;
input=fopen("in.txt", "r");
output=fopen("out.txt", "w");
char buffer[1000];
char bytebuffer=0;
char tempchr=0;
char huffmancode[100]={0};
int bufferindex=7;
fgets(&buffer[0],255,input);
int length=0;
while (buffer[length]!=0) length++;
fputc(length,output);
int j;
int k;
for (j=0;j<length;j++){
tempchr=buffer[j];
strcpy(&huffmancode[0],code[tempchr-97]);
k=0;
while(huffmancode[k]!=0){
if (huffmancode[k]!='0'){
setBit(&bytebuffer,bufferindex);
}
bufferindex-=1;
if (bufferindex==-1){
fputc(bytebuffer,output);
bytebuffer=0;
bufferindex=7;
}
k++;
}
}
次の行が原因で、このコードは正しく実行されていません。
tempchr=buffer[j];
この行は完全に正常に機能しますj < 10
がj >= 10
、プログラムではステータス アクセス オーバーフロー例外がスローされます。バッファー変数は 1000 バイトに割り当てられているため、プログラムが範囲内のインデックスにアクセスできない理由は明確ではありません。なぜこれが失敗するのですか?
含めなかった配列定義がいくつかあります。それらが問題だとは思いませんが、とにかくここにあります:
agac
配列:
int agac[1000]={21,12,9,7,5,
5,4,0,0,0,
0,3,2,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0
};
sembol
配列:
char sembol[1000]={0,0,0,'a','b',
0,'f',0,0,0,
0,'u','k',0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0,
0,0,0,0,0
};
ハフマン コードの配列:
char *code[27]={ "00","01",0,0,0,
"11",0,0,0,0,
"101",0,0,0,0,
0,0,0,0,"100",
0,0,0,0,0,
0,0
};