Re: [Rd] .Call and Segmentation Fault

From: Huntsinger, Reid <reid_huntsinger_at_merck.com>
Date: Wed 31 Aug 2005 - 16:15:16 GMT


I suggest you look at the code for .Call() in dotcode.c. I suspect the problem is in dealing with R objects, however. You don't show how you get from SEXPs to pointers to pass to Fortran, or what the Fortran routine requires.

I don't understand how you can call the "same" function from C. How do you deal with SEXPs?

Reid Huntsinger

Reid Huntsinger
-----Original Message-----
From: r-devel-bounces@r-project.org [mailto:r-devel-bounces@r-project.org] On Behalf Of Ricardo Luiz Andrade Abrantes Sent: Tuesday, August 30, 2005 4:33 PM
To: r-devel@r-project.org
Subject: Re: [Rd] .Call and Segmentation Fault

Hello to everybody!
After reading all the C code, checking for problems, and find nothing, I decided something a little bit different... If my ".so" library works in a wrog way in R it should do the same in C. So I created a C program that loads my library file and the executes the same function R is executing.
The program worked perfectly! In fact I changed two things in my library: The function I call now return an int, not a SEXP, and the return value is 0

not R_NilValue.
Valgrind's output is ok too...
If .Call has no problems, and if my function works perfect when called from a C program, where the problem lies? Why my program becomes "crazy" when I run it from R?
I would apreciate very much your help! I don't where else I could find help on this.
I can provide any piece of code that may help, Its just ask!

Thanks,

Ricardo

On 8/28/05, Prof Brian Ripley <ripley@stats.ox.ac.uk> wrote:
>
> On Sat, 27 Aug 2005, Ricardo Luiz Andrade Abrantes wrote:
>
> > Hi!
> > Yes, I am returning a SEXP from the functions called from R, and the
> > problem occurs before (thousands of iterations before) the return
> > point.
> > In fact I runned valgrind into R and when I call ".Call(...) " I got
> > many errors like:
> > ==4324== Use of uninitialised value of size 8
> > ==4324== at 0x1CB0766D: tnls_ (gencan.f:4101)
> > ==4324== by 0x1CB01962: gencan_ (gencan.f:1876)
> > ==4324== by 0x1CAFECA5: easygencan_ (gencan.f:440)
> > ==4324== by 0x1CB0B47D: algencan_ (algencan.f:517)
> > ==4324== by 0x1CB09E74: easyalgencan_ (algencan.f:76)
> > ==4324== by 0x1CAFE5B3: main (algencanma.c:808)
> > what does not happens when I compile the algencanma as a regular
> > program (not a library) and run it from shell. Valgrind does not find
> > anything wrong when I run the program directly, except 2 missing
> > free() calls.
> > Do you have any ideas where the problem lies (R .Call function or C
> program)?
>
> It cannot be .Call: your .Call passed no parameters so there was nothing
> to be uninitialized. I did ask you why you were doing that.
>
> .Call is very heavily tested in lots of R applications, so the prior
> probability of innocence must be very high.
>
> --
> Brian D. Ripley, ripley@stats.ox.ac.uk
> Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
> University of Oxford, Tel: +44 1865 272861 (self)
> 1 South Parks Road, +44 1865 272866 (PA)
> Oxford OX1 3TG, UK Fax: +44 1865 272595
>

        [[alternative HTML version deleted]]



R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Thu Sep 01 02:20:01 2005

This archive was generated by hypermail 2.1.8 : Mon 20 Feb 2006 - 03:21:19 GMT