السلام عليكم و رحمة الله و بركاته
لدي هذا الكود:
.
.
.
while(i<=nchunks)
{
if(i==nchunks)
{
nbytes=lbytes;
buffer=(char *)realloc(buffer, nbytes);
}
else
buffer = (char *)malloc(sizeof(char)*nbytes);
//printf("%i-0x%X\n", i, buffer);
out = (char*)malloc(sizeof(char)*strlen(fname)+3);
memset(buffer, '\0', nbytes);
memset(out, '\0', strlen(fname)+3);
.
.
.المشكلة انه عند تحقق الشرط if(i==nchunks) تظهر لي رسالة Segmentation fault من سطر الأوامر، بعد تنقيح بال gdb وجدت التالي:
Program received signal SIGSEGV, Segmentation fault. 0x00000008006f100d in _pthread_mutex_init_calloc_cb () from /lib/libc.so.7
لست أستعمل thread في برنامجي، عند عمل backtrace ظهر التالي:
#0 0x00000008006f100d in _pthread_mutex_init_calloc_cb () from /lib/libc.so.7 #1 0x00000008006f4c77 in realloc () from /lib/libc.so.7 #2 0x00000008006f4bf9 in realloc () from /lib/libc.so.7 #3 0x00000008006f4ae1 in realloc () from /lib/libc.so.7 #4 0x0000000000400b1c in main () at test.c:26
أي أنه في السطر:
buffer=(char *)realloc(buffer, nbytes);
لا أفهم لماذا لايعيد مؤشر جديد ل buffer رغم أني أقوم بتحرير الذاكرة كل دورة في while.

