Re: [Rd] Strange behavior of C compiled program

From: Duncan Murdoch <>
Date: Mon, 09 Feb 2009 05:23:52 -0500

On 09/02/2009 4:05 AM, Christophe Genolini wrote:
> Thanks, that was a stupid mistake (I did not know that this is so
> important).
> So I still have a problem realy more complex and I do not know was is
> wrong. I am running a .C procedure in a R loop.
> After 4, 5 or sometimes 6 call to the C procedure, Rgui crash (it closes
> asking me if I want to send a report to Microsoft).
> Is there a debuger that can run the C code with some R in it ? And what
> kind of mistake can provoque such a crash ?

Debugging C code in R on Windows is a little painful. valgrind doesn't run on Windows (as far as I know), and none of the commercial debuggers support the debug format that gcc uses. However, you can run gdb, and it mostly works. See my page

for details. (I use the Cygwin version of gdb, but it usually gets the backtrace wrong if you look for a stack dump. I understand the MinGW version is better at that, but I've been unable to get the Insight graphical front end to work with it. I'd love to hear from someone who has a modern graphical front end working for debugging MinGW code on Windows.)

Duncan Murdoch

> Thanks
> Christophe
> So I thaught that I find t

>> On 08/02/2009 5:37 PM, Christophe Genolini wrote:
>>> Hi the list,
>>> I need to include some C code in R, but the behavior of the C code is 
>>> strange : Here is my code :
>>> --- 8< ---
>>>     Rprintf("\n XXXX mTraj=%f 
>>> mClus=%f",mTraj[i+nbId*c],mClustersCenter[j+nbClusters*c]);
>>>     Rprintf("\nDistA=%d Tmp=%d",dist,tmp);
>>>             tmp = mTraj[i+nbId* c] - mClustersCenter [j+nbClusters* c];
>>>     Rprintf("\nDistB=%d Tmp=%d",dist,tmp);
>>>             dist += (tmp * tmp);
>>>     Rprintf("\nDistC=%d Tmp=%d",dist,tmp);
>>> --- 8< ----
>>> Herer are the stranges results it gives :
>>> XXXX mTraj=1.000000 mClus=3.000000
>>> DistA=0 Tmp=0
>>> DistB=0 Tmp=0
>>> DistC=0 Tmp=1074790400
>>> I ask on a C chat, but no one can answer me.
>>> Any idea of what wrong ?
>> You likely have the wrong types for the variables you're printing.  In 
>> C, the format has to match the type of the variable; if you use the 
>> wrong one, you get garbage.
>> Duncan Murdoch

______________________________________________ mailing list Received on Mon 09 Feb 2009 - 10:29:15 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Mon 09 Feb 2009 - 14:30:20 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive