I am trying to debug a program in order to find the cause of a segmentation fault. So I commented all of the code and slowly uncommented from the start to find the location of the segmentation fault. This was successful and I have discovered the function that is causing it. Then, I decided to add a printf to the start of that function, and oddly enough nothing printed. I then added printf to the calling function, and nothing printed there either. So in the same manner of finding the location of the segmentation fault, I set about finding the place my program stopped printing. And I did. It was the line:
retVal->maxSize=10;
And I have no idea why. All of the relevant code is here:
circular.h
typedef struct Quote {
unsigned int time;
double rate;
} quote;
typedef struct CBuf {
unsigned int maxSize;
unsigned int size;
unsigned int first;
unsigned int last;
quote* arrayPointer;
} cbuf;
cbuf* cbuf_init();
void cbuf_delete(cbuf* cb_ptr);
void cbuf_update(cbuf* cb_ptr,unsigned int time,double rate);
double cbuf_average(cbuf* cb_ptr);
quote* cbuf_start(cbuf* cb_ptr);
quote* cbuf_end(cbuf* cb_ptr);
void cbuf_dump(cbuf* cb_ptr);
void cbuf_stats(cbuf* cb_ptr);
circular.c
#include "circular.h"
#include <stdlib.h>
#include <stdio.h>
cbuf* cbuf_init() {
printf("cbufinit\n");
cbuf* retVal;
printf("makingretval\n");
printf("%d\n",(*retVal).maxSize);
retVal->maxSize=10;
printf("9\n");
retVal->size=0;
retVal->first=0;
retVal->last=0;
quote* quotes=malloc(10*sizeof(quote));
retVal->arrayPointer=quotes;
return retVal;
}
// More code below, but this is the only function that is called
// makingretval and -72537468 are printed
// 9 is not printed
main6a.c
#include <stdio.h>
#include <stdlib.h>
#include "circular.h"
int main() {
printf("start\n");
printf("1\n");
cbuf *cb1 ;
printf("2\n");
cb1 = cbuf_init() ;
printf("3\n");
return 0 ;
}
// 1 and 2 are printed
// 3 is not printed
Everything compiles fine, it is simply that printf does not seem to work at all following the retVal->maxSize=10; line. In a separate run, I added a getchar call after the printf("3\n") which ran fine. So the program is still getting to the end with no issue. I just want to know why it is not printing.
Thanks!
Not Telling