Grüße!Zeiger wird nichts ohne ersichtlichen Grund
Ich habe ein einfaches Programm in qt auf c. Es gibt zwei Zeiger auf type short, die zum Lesen von Datei- und Speicherbits aus gelesenen Werten verwendet werden.
Beispielcode:
//(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);
ich aus unreliant Teile des Codes lassen haben. Wenn Sie etwas anderes sehen möchten, sagen Sie es mir bitte.
Problem ist, nach wie 10 oder 15 Operationen der Schleife, stürzt es mit "Segmentation Fault" Signal. Es stürzt bei der Funktion fwrite() ab.
Ich debuggte und ich benutze Uhr auf sample_buffer. Aus irgendeinem Grund, in einem exakten Schritt, macht die Operation nzb_buffer [buffer_position] = sample_buffer [0]% 2 den sample_buffer zu 0x0 (ich glaube, es wird ein Nullzeiger).
Dies kann auf nzb_buffer nicht überlaufen, da buffer_position für diese Operation 3 ist (von 7 für das jeweilige Array in malloc). Und da jede Schleife eine Schreiboperation ausführt und den Übertrag verschiebt, ist die Operation des Schreibens in nzb_buffer [3] bereits zuvor in der Schleife aufgetreten und löschte den Zeiger nicht zu dieser Zeit.
Ich bin völlig ahnungslos, was hier passiert. Hat jemand irgendwelche Ideen was los ist oder wie debugge ich es?
Vielen Dank im Voraus!
PS: Hinzugefügt Kommentare „was der Code tut“
Hum, war nicht Qt eine C++ - Bibliothek? – peoro
Um ehrlich zu sein, ich habe Mühe zu verstehen, was dieser Code versucht zu tun. Ich finde die Stücke, die du weggelassen hast, sind sehr relevant. –
ja, aber ich muss ein c code einbinden, also ist dieser teil in c. qt arbeitet auch mit c, du machst einfach "extern" C "" mit deinem c code und sein ok – Istrebitel