golden_boy615 |
12-03-2011 04:32 AM |
valgrind: Conditional jump or move depends on uninitialised value(s)
Hello
I get this message from valgrind :
Quote:
# valgrind -v --tool=memcheck --num-callers=50 --run-libc-freeres=yes --leak-check=yes --leak-resolution=high --log-fd=2 --show-reachable=yes --track-fds=yes -- myprogram
--2907-- Discarding syms at 0x402ea90-0x4035fe8 in /lib/i386-linux-gnu/libnss_files-2.13.so due to munmap()
==2907==
==2907== FILE DESCRIPTORS: 5 open at exit.
==2907== Open file descriptor 14:
==2907== <inherited from parent>
==2907==
==2907== Open file descriptor 13:
==2907== <inherited from parent>
==2907==
==2907== Open file descriptor 2: /dev/pts/0
==2907== <inherited from parent>
==2907==
==2907== Open file descriptor 1: /dev/pts/0
==2907== <inherited from parent>
==2907==
==2907== Open file descriptor 0: /dev/pts/0
==2907== <inherited from parent>
==2907==
==2907==
==2907== HEAP SUMMARY:
==2907== in use at exit: 0 bytes in 0 blocks
==2907== total heap usage: 65,516 allocs, 65,516 frees, 123,099,012 bytes allocated
==2907==
==2907== All heap blocks were freed -- no leaks are possible
==2907==
==2907== Use --track-origins=yes to see where uninitialised values come from
==2907== ERROR SUMMARY: 2 errors from 1 contexts (suppressed: 27 from 8)
==2907==
==2907== 2 errors in context 1 of 1:
==2907== Conditional jump or move depends on uninitialised value(s)
==2907== at 0x40268E5: realloc (vg_replace_malloc.c:525)
==2907== by 0x8050222: Init_Device_Segments (myprogram.h:2018)
==2907== by 0x8069B72: Configure_All (myprogram.h:8236)
==2907== by 0x806A37A: MainThread (myprogram.h:8446)
==2907== by 0x4567E98: start_thread (pthread_create.c:304)
==2907== by 0x44D073D: clone (clone.S:130)
==2907==
--2907--
--2907-- used_suppression: 27 U1004-ARM-_dl_relocate_object
==2907==
==2907== ERROR SUMMARY: 2 errors from 1 contexts (suppressed: 27 from 8)
|
and this one with --track-origins=yes :
Quote:
#valgrind -v --tool=memcheck --num-callers=50 --run-libc-freeres=yes --leak-check=yes --leak-resolution=high --track-origins=yes --log-fd=2 --show-reachable=yes --track-fds=yes myprogram
--2942-- Discarding syms at 0x402ea90-0x4035fe8 in /lib/i386-linux-gnu/libnss_files-2.13.so due to munmap()
==2942==
==2942== FILE DESCRIPTORS: 5 open at exit.
==2942== Open file descriptor 14:
==2942== <inherited from parent>
==2942==
==2942== Open file descriptor 13:
==2942== <inherited from parent>
==2942==
==2942== Open file descriptor 2: /dev/pts/0
==2942== <inherited from parent>
==2942==
==2942== Open file descriptor 1: /dev/pts/0
==2942== <inherited from parent>
==2942==
==2942== Open file descriptor 0: /dev/pts/0
==2942== <inherited from parent>
==2942==
==2942==
==2942== HEAP SUMMARY:
==2942== in use at exit: 0 bytes in 0 blocks
==2942== total heap usage: 63,803 allocs, 63,803 frees, 122,831,340 bytes allocated
==2942==
==2942== All heap blocks were freed -- no leaks are possible
==2942==
==2942== ERROR SUMMARY: 2 errors from 1 contexts (suppressed: 27 from 8)
==2942==
==2942== 2 errors in context 1 of 1:
==2942== Conditional jump or move depends on uninitialised value(s)
==2942== at 0x40268E5: realloc (vg_replace_malloc.c:525)
==2942== by 0x8050222: Init_Device_Segments (myprogram.h:2018)
==2942== by 0x8069B72: Configure_All (myprogram.h:8236)
==2942== by 0x806A37A: MainThread (myprogram.h:8446)
==2942== by 0x4567E98: start_thread (pthread_create.c:304)
==2942== by 0x44D073D: clone (clone.S:130)
==2942== Uninitialised value was created by a stack allocation
==2942== at 0x806A206: MainThread (myprogram.h:8391)
==2942==
--2942--
--2942-- used_suppression: 27 U1004-ARM-_dl_relocate_object
==2942==
==2942== ERROR SUMMARY: 2 errors from 1 contexts (suppressed: 27 from 8)
|
those part that I think is related to these errors are:
Code:
void *MainThread(void *IdDevice)
{ <================================================ line:8391
....
....
....
....
line :: 8446 ret=Configure_All(&MysqlData,&DevTable,&TrendTableArr,&DirtyPage,&LogTableArr,&AlarmTableArr,&DevReg,&DevSeg,&DiffTableArr,&ThisDevInfo,&MBCommand,devid);
..
...
}
int Configure_All(_MysqlData *MysqlData,_DevTable *DevTable,_TrendTableArr *TrendTableArr,_DirtyPage *DirtyPage,_LogTableArr *LogTableArr,_AlarmTableArr *AlarmTableArr,_DevReg *DevReg,_DevSeg *DevSeg,_DiffTableArr *DiffTableArr,_ThisDevInfo *ThisDevInfo,_MBCommand *MBCommand,int devid)
{
int ret=0;
...
...
...
...
line:8236 ret=Init_Device_Segments(DevSeg,DevReg,ThisDevInfo);
if (ret!=0)
{
return ret;
}
...
...
...
...
}
int Init_Device_Segments(_DevSeg *DevSeg,_DevReg *DevRegFirst,_ThisDevInfo *ThisDevInfo)
{
_DevReg *DevReg;
ThisDevInfo->registerpartitions=1;
DevReg=DevRegFirst;
if (DevSeg->index==0)
{
int reggap;
unsigned int Current_Row=0;
reggap=ThisDevInfo->reggap;
int j=0;
while(DevReg!=NULL)
{
if (DevReg->index>0)
{
line:2018 DevSeg->DevSegArr=(_DevSegArr*)realloc(DevSeg->DevSegArr,((DevSeg->index+1)*sizeof(_DevSegArr)));
DevSeg->DevSegArr[Current_Row].startreg=DevReg->DevRegArr[0].regaddr+DevReg->DevRegArr[0].offset;
DevSeg->DevSegArr[Current_Row].startarrayindex=0;
DevSeg->DevSegArr[Current_Row].numberofarrayelement=0;
DevSeg->DevSegArr[Current_Row].range=0;
DevSeg->DevSegArr[Current_Row].MBFunction=DevReg->MBFunction;
DevSeg->index=Current_Row+1;
while (j < DevReg->index)
{
if (j != (DevReg->index-1) )
{
if ((DevReg->DevRegArr[j].regaddr+DevReg->DevRegArr[j].regformatint == DevReg->DevRegArr[j+1].regaddr || DevReg->DevRegArr[j+1].regaddr-DevReg->DevRegArr[j].regaddr <= reggap ) && DevSeg->DevSegArr[Current_Row].range+DevReg->DevRegArr[j].regformatint < 120)
{
if (DevReg->DevRegArr[j].regaddr+DevReg->DevRegArr[j].regformatint == DevReg->DevRegArr[j+1].regaddr)
{
DevSeg->DevSegArr[Current_Row].numberofarrayelement++;
DevSeg->DevSegArr[Current_Row].range=DevSeg->DevSegArr[Current_Row].range+DevReg->DevRegArr[j].regformatint;
DevSeg->DevSegArr[Current_Row].MBFunction=DevReg->MBFunction;
}
else if ((DevReg->DevRegArr[j].regaddr+reggap >= DevReg->DevRegArr[j+1].regaddr) && (DevSeg->DevSegArr[Current_Row].range+(DevReg->DevRegArr[j+1].regaddr+DevReg->DevRegArr[j+1].regformatint)-DevReg->DevRegArr[j].regaddr <= 120))
{
while (j < DevReg->index-1 && (DevReg->DevRegArr[j+1].regaddr-DevReg->DevRegArr[j].regaddr <= reggap || (DevReg->DevRegArr[j+1].regaddr+DevReg->DevRegArr[j+1].regformatint)-DevReg->DevRegArr[j].regaddr <= reggap) && DevSeg->DevSegArr[Current_Row].range+(DevReg->DevRegArr[j+1].regaddr+DevReg->DevRegArr[j+1].regformatint)-DevReg->DevRegArr[j].regaddr <= 120)
{
DevSeg->DevSegArr[Current_Row].numberofarrayelement++;
if (j != (DevReg->index-1) )
{
DevSeg->DevSegArr[Current_Row].range=DevSeg->DevSegArr[Current_Row].range+DevReg->DevRegArr[j+1].regaddr-DevReg->DevRegArr[j].regaddr;
DevSeg->DevSegArr[Current_Row].MBFunction=DevReg->MBFunction;
}
j++;
}
if (j == (DevReg->index-1) && (DevReg->DevRegArr[j].regaddr-DevReg->DevRegArr[j-1].regaddr <= reggap || (DevReg->DevRegArr[j].regaddr+DevReg->DevRegArr[j].regformatint)-DevReg->DevRegArr[j-1].regaddr <= reggap) && DevSeg->DevSegArr[Current_Row].range+(DevReg->DevRegArr[j].regaddr+DevReg->DevRegArr[j].regformatint)-DevReg->DevRegArr[j-1].regaddr <= 120)
{
DevSeg->DevSegArr[Current_Row].range=DevSeg->DevSegArr[Current_Row].range+DevReg->DevRegArr[j].regformatint;
DevSeg->DevSegArr[Current_Row].MBFunction=DevReg->MBFunction;
}
j--;
}
}
else
{
DevSeg->DevSegArr[Current_Row].range=DevSeg->DevSegArr[Current_Row].range+DevReg->DevRegArr[j].regformatint;
DevSeg->DevSegArr[Current_Row].MBFunction=DevReg->MBFunction;
Current_Row++;
DevSeg->index=Current_Row+1;
DevSeg->DevSegArr=(_DevSegArr*)realloc(DevSeg->DevSegArr,DevSeg->index*sizeof(_DevSegArr));
DevSeg->DevSegArr[Current_Row].startreg=DevReg->DevRegArr[j+1].regaddr+DevReg->DevRegArr[j+1].offset;
DevSeg->DevSegArr[Current_Row].startarrayindex=j+1;
DevSeg->DevSegArr[Current_Row].numberofarrayelement=1;
DevSeg->DevSegArr[Current_Row].range=0;
ThisDevInfo->registerpartitions++;
}
}
else
{
DevSeg->DevSegArr[Current_Row].range=DevSeg->DevSegArr[Current_Row].range+DevReg->DevRegArr[j].regformatint;
}
j++;
}
}
else
{
DevSeg->index=0;
}
DevReg=DevReg->next;
}
}
return 0;
}
I can not find out how to solve this problem.
would you please tell me how to solve it ?
I know what does "Conditional jump or move depends on uninitialised value(s)" means but I can not find where I did that and as you see one of them is first line of my thread "void *MainThread(void *IdDevice)" it is really strange for me.
Thank you for any help.
|