Hi Marcelo, You need to read the R extension manual more carefully... Basically you haven't deference thed pointers. You think you were allocating say, col=2, but instead you were allocating &col in int's, the address of col, which is a large number since user-land memory address starts at a large offset (0x40000000? = 1/2 GB or 0x80000000 = 1GB?), so after 4 large allocations, you run out of memory.
Everything through the C interface is passed by pointer, in the fortran convention. BTW, you should use Rprintf() instead of printf(). Details below. Hin-Tak Leung Marcelo Damasceno wrote: > Hello all and Prof. Brian Ripley , > > Sorry about my incautiousness, I use the tips, but is happen same problems. > Below the R code. > ################################################################ > rspcplot <- function(file1="dg_01.lab.txt"){ > if(is.null(n)) > stop("You need first run the function cluster") > file<-"dg_01.lab.txt" > aux<-file1 > file1<-pmatch(file1,file) > if(is.na(file1)){ > matrix=loadMatrix(file,n) > } > else{ > matrix=loadMatrix(aux,n) > } > matrixc<-correct(matrix) > #merge2(matrixc) > nrow=nrow(matrixc) > ncol=ncol(matrixc) > ntemp=getTemp() > out <- .C("merge2",matrixc,nrow, ncol,ntemp,outMerge=as.integer > (0),outHeight=as.integer(0),PACKAGE="rspc") > ########################################################################## > Below the C code. > ########################################################################## > void merge2(int *nmat,int nrow,int ncol, int *ntemp,int ntam, int *out, int > *height){ Here, you should have "*ncol" instead of "ncol". (I am only correcting this one - you can change the others) like this: void merge2(int *nmat,int nrow,int *ncol, int *ntemp,int ntam, int *out, int *height){ > int row,col,*temp,i,j,k,n3,tam,x,aux2,n1; > row = nrow; > col = ncol; You should use here: int col = *ncol; > > int *temp1,*temp2,*temp3,*temp4; > > temp1 = (int*)Calloc(col,int); inserting here: Rprintf("I am trying to allocate col = %d\n", col); would have told you what's wrong with your code... > printf("OK1 \n"); > temp2 = (int*)Calloc(col,int); > printf("OK2 \n"); > temp3 = (int *)Calloc(col,int); > printf("OK3 \n"); > temp4 = (int *)Calloc(col,int); > if(temp4 == NULL){ > printf("\n\n No Memory4!"); > exit(1); > } > printf("OK4\n"); > int *cvector; > cvector = (int *)Calloc(col,int); > if(cvector == NULL){ > printf("\n\n No Memory5!"); > exit(1); > } > printf("OK5\n"); > tam=ntam; > ####################################################################### > Output of Work Space: > > >>rspcplot() > > Read 525 items > Read 101 items > OK1 > OK2 > OK3 > OK4 > Error in rspcplot() : Calloc could not allocate (145869080 of 4) memory > > > Using the Ruspini data, the values of variables col = 2 and row = 75. I was > thinking that the number of pointers and space of memory are too big. > > > Thanks All ! <earlier posts snipped> ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel