Hello All,
I am dealing with this weird bug.
I have a function in C and I have written python bindings for it using
ctypes.
I can call this function for couple of times and then suddenly it
gives me seg fault.
But I can call same function from a C code for any number of times.
I cannot get what's going on.
here is my code.
/*************** *************** *************** */
/* C Function I am calling */
/*** END OF C FUNCTION ******/
--------------------------------------------------------------------
Python code
---------------------------------------------------------------------
============== END OF PYTHON CODE =============== ===========
Thank you in advance,
sanket
I am dealing with this weird bug.
I have a function in C and I have written python bindings for it using
ctypes.
I can call this function for couple of times and then suddenly it
gives me seg fault.
But I can call same function from a C code for any number of times.
I cannot get what's going on.
here is my code.
/*************** *************** *************** */
/* C Function I am calling */
Code:
int get_hash(char *filename,int rate,int ch,unsigned char* hash, unsigned int* hash_size,short* avg_f,short* avg_d){ /* some variable declarations here */ fp = fopen(filename,"rb"); data = (signed short *)malloc(sizeof(signed short) * N_BLOCKS); whereami = WAVE_HEADER_SIZE; while((!feof(fp)) && (fp_more == 1) && !ferror(fp)){ data_size = fread(data,sizeof(signed short),N_BLOCKS,fp); whereami += data_size; fp_more = fp_feed_short(id,data,data_size); // call to some library funtion } //end while /* some arithmetic calculations here */ n = hash_calculate(id,length,hash,&f,&d); if (data != NULL) free(data) fclose(fp) return n; }
--------------------------------------------------------------------
Python code
---------------------------------------------------------------------
Code:
from ctypes import * lib = cdll.LoadLibrary("/usr/lib/libclient.so") def my_func(filename,rate,ch): hash = (c_ubyte * 424)() hash_size = c_uint() avg_f = c_short(0) avg_d = c_short(0) n = lib.get_hash(filename,rate,ch,hash,byref(hash_size),byref (avg_f),byref(avg_d)) hash = None def main(): for filename in os.listdir(MY_DIR): print filename my_func(filename,100,10) print "----------------------------------------------------" if __name__ == "__main__": main()
Thank you in advance,
sanket
Comment