LLVM seg fault : dereference an uninitialized pointer Instruction*




|



Hello everyone,




I encounter a segfault problem in my LLVM function pass. I think the problem is that I dereference an uninitialized pointer from an array of Instruction* elements which results in undefined behavior. The array is :



<br>Instruction** ifsInstrArray = new Instruction*[100]; <br><br>



The problem appears only sometimes (during runOnFunction && visiting BasicBlocks and Instructions). Sometimes means, for e.g. :



<br>errs()<<*ifsInstrArray[0]<<"\n"<<*ifsInstrArray[1];<br><br>



only for ifsInstrArray[1] the segfault appears. I already checked if ifsInstrArray[1] is not NULL. Please note that the above is only a test for my primary segfault problem. The primary segfault problem is : More precisely, I am trying to check if two instructions are equivalent by using



<br>if ( CC->operEquiv(ifsInstrArray[i], ifsInstrArray[j]) )<br><br>



where CC and operEquiv are defined by me. If extra code is needed, please let me know. The seg fault appears here. I think that the problem is related with the “test problem” defined at the beginning of the question. Can you please tell me how can I initialize the ifsInstrArray array? And for its elements I should use the constructor of Instruction
(I cannot find it in Instruction.h)? I cannot initialize the elements by assigning NULL.




Thank you for your answer !



PS: i,j are boundary-ok in my for loops; ifChecker* CC=new ifChecker(); in ifChecker class there is: virtual bool operEquiv(Instruction *I1, Instruction *I2);



|

You need to make sure that the pointers in the array actually point to instructions. I suspect that your code tries to dereference pointers that have indeterminate values (i.e. are uninitialized).

-Krzysztof