2011-01-27 11 views
0

printfが動作しなくても、このコードで何が問題になりますか?バッファがフラッシュされる前に、あなたのプログラムがクラッシュしているので、おそらく表示されないのは、S()が正常にこのコードで何が問題になっていますか? printfが印刷されていません

#include <speex/speex.h> 
#include <stdio.h> 
#include <stdlib.h> 
/*The frame size in hardcoded for this sample code but it doesn't have to be*/ 
#define FRAME_SIZE 160 



int main() 
{ 
    printf("decoding"); 
    char *outFile; 
    FILE *fout, *fs; 
    short out[FRAME_SIZE]; 
    float output[FRAME_SIZE]; 
    char cbits[200]; 
    int nbBytes; 
    void *state; 
    SpeexBits bits; 
    int i, tmp; 
    fout = fopen("test_40khz_mono_Q5.spx", "rb"); 
    if(fout == NULL){ 
    printf("******Error*******"); 
    } 
    else{ 
    printf("*******Okay********"); 
    } 

    fs = fopen("pcmfile","wb"); 
    if(fs == NULL){ 
    printf("****Error pcm creation****"); 
    } 
    else{ 
    printf("*****pcm File created*****"); 
    } 
state = speex_decoder_init(&speex_nb_mode); 

    tmp=1; 
    speex_decoder_ctl(state, SPEEX_SET_ENH, &tmp); 
    speex_bits_init(&bits); 

    while (!(feof(fout))) 
    { 
    fread(&nbBytes, sizeof(int), 1, fout); 
    fread(cbits, 1, nbBytes, fout); //Problem area 
    speex_bits_read_from(&bits, cbits, nbBytes); 
    speex_decode(state, &bits, output); 

    for (i=0;i<FRAME_SIZE;i++) 
     out[i]=output[i]; 

     fwrite(out, sizeof(short), FRAME_SIZE, fs); 
    } 

    speex_decoder_destroy(state); 
    speex_bits_destroy(&bits); 
    fclose(fout); 
    fclose(fs); 
    return 0; 
} 
+2

3つのprintfがあります。本当の質問をしてください。問題の原因とならない亀裂をすべて取り除いて、サンプルをきれいにしてください。最小の部分は残しておいてください。もっと見ることに興味があります。 –

+3

これらの診断用の 'printf'にいくつかの改行を追加します - おそらく正常に呼び出されていますが、バッファがいっぱいになるか、fflushを呼び出すか改行を出力して、 – tobyodavies

+1

プログラムはどのように動作するのですか?それはクラッシュしますか?はいの場合は、エラーメッセージは何ですか?出力を書き込まずに正常に実行できますか? – Codo

答えて

2

あなたのprintfがバッファリングされている可能性があり、プログラミングがクラッシュしている可能性があります(あなたは何が起こったのかわかりません)ので、バッファが破棄されます。 * nixのでは出力は、一般的にラインバッファリングされ、そしてあなたがそうのように、行を終了した場合に作業を開始しますprintfのよ:あなたはおそらくする必要がありますよう(

printf("decoding\n"); 

または明示的にバッファをフラッシュすることができますいくつかのプラットフォームで)

printf("decoding\n"); 
fflush(stdout); 

それ以上の情報を得ることができなければ、それ以上のことはありません。それはクラッシュですか?それは 'セグメンテーションフォールト'などのようなものを印刷しますか?

HTH

+0

@above:はい、nbashに指定されている長さのcrashing.causeです – karthick

0

あなたのprintfをコンパイルしています。

なぜクラッシュするのですか?あなたの次の読み取りがcbitsのために割り当てられたスペースをあふれているので、nbBytesに読み込まれた数値が200より大きいかもしれません。

1

あなたのプログラムを取得するには、あなたがあなたののprintf文に改行を追加する必要がどこまで見るために:

printf("decoding\n"); 

の代わり:

printf("decoding"); 

そうでない場合、出力は単にバッファリングされていますコンソールには書き込まれませんでした。

関連する問題