From ripley at stats.ox.ac.uk  Thu Dec 29 18:40:37 2005
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Thu, 29 Dec 2005 17:40:37 +0000 (GMT)
Subject: [Rd] Problems with calloc function.
In-Reply-To: <a55593730512290649w497ffc10p75c5fd7f71af402b@mail.gmail.com>
References: <a55593730512290649w497ffc10p75c5fd7f71af402b@mail.gmail.com>
Message-ID: <Pine.LNX.4.61.0512291524370.31762@gannet.stats>

Rather than trying to reinvent the wheel, why not make use of the 
functions documented in Writing R Extensions, especially Calloc/Free?

And definitely do not call exit() from code linked into R: it is 
antisocial behaviour to terminate your host's process.

Your example is incomplete, and for some values of 'col' you will run out 
of memory.  (It is also not legal C as written, since you mix code and 
declarations.)

On Thu, 29 Dec 2005, Marcelo Damasceno wrote:

> Hi all,
>
> I have a C code in Linux, it has 7 pointers and compile e run OK, but when I
> run in R happens problems with calloc function, it returns NULL.
> ###############################################
>> int *temp1,*temp2,*temp3,*temp4;
>
> temp1 = (int *)calloc(col,sizeof(int));
> if(temp1 == NULL){
>     printf("\n\n No Memory1!");
>     exit(1);
> }
>
>  temp2 = (int *)calloc(col,sizeof(int));
>  if(temp2 == NULL){
>        >printf("\n\n No Memory2!");
>        >exit(1);
>    }
>
>    temp3 = (int *)calloc(col,sizeof(int));
>    if(temp3 == NULL){
>        >printf("\n\n No Memory3!");
>        >exit(1);
>    }
>
>    temp4 = (int *)calloc(col,sizeof(int));
>    if(temp4 == NULL){
>        printf("\n\n No Memory4!");
>        exit(1);
>    }
>
>    int *cvector;
>    cvector = (int *)calloc(col,sizeof(int));
>    if(cvector == NULL){
>        printf("\n\n No Memory5!");
>        exit(1);
>    }
>
>    tam=ntam;
>
>    int **matrix;
>    matrix=(int**)calloc(row,sizeof(int*));
>    if(matrix == NULL){
>        printf("\n\n No Memory6!");
>        exit(1);
>    }
>
>    temp=(int*)calloc(tam,sizeof(int));
>    if(temp == NULL){
>        printf("\n\n No Memory7!");
>        exit(1);
>    }
>
>    iia = (int *)calloc(row-1,sizeof(int));
>    if(iia == NULL){
>        printf("\n\n No Memory8!");
>        exit(1);
>    }
>
>    iib = (int *)calloc(row-1,sizeof(int));
>    if(iib == NULL){
>        printf("\n\n No Memory9!");
>        exit(1);
>    }
> ############################################
> In output !
>> No Memory5!
>> [marcelo at cocada01 home] $
>
> What's wrong?
> Thanks!
>
> --
> Marcelo Damasceno de Melo
> Graduando em Ci?ncia da Computa??o
> Departamento de Tecnologia da Informa??o - TCI
> Universidade Federal de Alagoas - UFAL
> Macei? - Alagoas - Brasil
> Projeto CoCADa - Constru??o do Conhecimento por Agrupamento de dados
> +55 82 8801-2119
>
> 	[[alternative HTML version deleted]]
>
>

-- 
Brian D. Ripley,                  ripley at 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


[Rd] Problems with calloc function.
Prof Brian Ripley