おはようございます!ポインタが明白な理由で何も表示されない
私はqtでcという簡単なプログラムを持っています。 short型には2つのポインタがあり、読み込まれた値からファイルおよび格納ビットを読み出すために使用されます。
サンプルコード:私は、コードのunreliant作品を聞かせてきた
//(input is a FILE* which is opened and passed to the function)
//(output is also a FILE* which is also opened and passed to the function)
//1. Variables declaration
short* sample_buffer;
int buffer_size=1;
short samples_read;
unsigned long value_x=7;
short* nzb_buffer;
short buffer_position=-1;
int i;
//2.Memory allocation
sample_buffer= malloc(sizeof(short)*buffer_size);
nzb_buffer = malloc(sizeof(short)*value_x);
....
//3. Read from infile, one short at time, process and write it to outfile
do
{
//3.1. Read from input file
samples_read = fread(sample_buffer,sizeof(short),buffer_size, input);
//3.2. Switch position inside nzb_buffer one to the right,
// going back to zero if out of bounds
buffer_position=(buffer_position+1)%value_x;
....
//3.3. Put least significant bit of the just read short into nzb_buffer
nzb_buffer[buffer_position]=sample_buffer[0]%2;
....
//3.4. Write the short we just read from infile to the outfile
for (i=0;i<samples_read;i++)
{
fwrite(sample_buffer,sizeof(short),1, output);
}
} while(samples_read==buffer_size);
。あなたが何か他のものを見る必要があるなら、教えてください。
問題は、ループの10回または15回の操作後、「セグメンテーションフォルト」信号でクラッシュするという問題です。 fwrite()関数でクラッシュします。
私はデバッグし、私はsample_bufferでwatchを使用します。なんらかの理由で、1つの正確なステップで、nzb_buffer [buffer_position] = sample_buffer [0]%2という操作は、sample_bufferを0x0にします。
nzb_bufferでオーバーフローすることはできません。その操作のbuffer_positionは3です(malloc内の特定の配列に割り当てられた7つのうちの7つ)。そして、各ループは1回の書き込み操作をしてキャリーをシフトするので、nzb_buffer [3]への書き込み操作はループの前に既に発生しており、その時点でポインタを無効化しませんでした。
私はここで起こっている可能性が全くありません。 誰も何が起こっているか、どのように私はそれをデバッグするかについてのアイデアはありますか?
ありがとうございます!
PS:追加されましたコメントは、forループ
ハムは、Qt C++ライブラリではありませんでしたか? – peoro
正直言って、私はこのコードが何をしようとしているのか理解するのに苦労しています。私が残した部分は非常に関連性があると感じます。 –
はい、しかし、私はそこにいくつかのcコードを組み込む必要があるので、この部分はcです。 qtはcと同様に動作しますが、あなたはCコードで "extern" C ""を実行してもOKです – Istrebitel