PDA

View Full Version : [C] funzione per allocare matrice dinamicamente


peppedilillo
05-05-2012, 01:31
#include <stdio.h>
#include <stdlib.h>

int** alloca(int,int);



main()
{
int **mat,i,j;


mat=alloca(2,2);

for(i=0;i<2;++i)
{
for(j=0;j<2;++j)
mat[i][j]=0;
}

}


int** alloca(int r,int c)
{
int **matrix,i;

matrix = (int**)malloc(r*sizeof(int*));
for (i=0; i<r; i++)
matrix[i] = (int*)malloc(c*sizeof(int));

return matrix;
}





ciao ragazzi!

sto provando a scrivere una funzione che allochi dinamicamente una matrice di n righe ed m colonne.

compilando ottengo gli errori:

test2.c:6:21: error: macro "alloca" passed 2 arguments, but takes just 1
test2.c:6: error: ‘alloca’ redeclared as different kind of symbol
test2.c:15:16: error: macro "alloca" passed 2 arguments, but takes just 1
test2.c:26:25: error: macro "alloca" passed 2 arguments, but takes just 1
test2.c:27: error: syntax error before ‘{’ token
test2.c:30: error: ‘r’ undeclared here (not in a function)
test2.c:30: warning: initialization makes integer from pointer without a cast
test2.c:30: error: initializer element is not constant
test2.c:30: warning: data definition has no type or storage class
test2.c:31: error: syntax error before ‘for’


la linea 6 è quella relativa la dichiarazione della funzione alloca
int** alloca(int,int);

Qualcuno riesce ad aiutarmi? : - (

AllerITA
05-05-2012, 09:30
Prova così:



#include <stdio.h>
#include <stdlib.h>

int* allocare(int maxx,int maxy);



int main()
{
int *mat,i,j,maxx,maxy;
maxx=2;
maxy=2;


mat=allocare(maxx,maxy);

// errore non posso allocare nella Heap la matrice
if ( NULL == mat) return 0;

for(i=0;i<maxx,i++) //incremento dopo i
{
for(j=0;j<maxy;j++) //incremento dopo j
*(mat+(j+i*maxy))=0; // mat[i][j]=0; EDIT: Errore grave mio corretto successivamente
}
return 0;

}


int* allocare(int maxx,int maxy)
{
int *matrix;


// alloco uno spazio di memoria pari a max righe per il numero di max colonne
matrix = (int *)malloc(sizeof(int)*(maxx*maxy));
return matrix;
}



se non ho fatto errori di digitazione così dovrebbe andare.
Comunque se ne ho fatti scusatemi perche ho tirato il codice giù a memoria.

EDIT: ho riguardato il codice he come avevo anticipato ho fatto degli errori di concetto.

lorenzo001
05-05-2012, 10:37
Qualcuno riesce ad aiutarmi? : - (

Il codice va benissimo ma devi cambiare il nome della funzione

alloca

Non so quale compilatore usi ma la alloca è una macro definita da qualche parte.

peppedilillo
05-05-2012, 11:23
grazie mille a entrambi ragazzi! :D :D


a presto!!

Gimli[2BV!2B]
05-05-2012, 11:26
man alloca (http://linux.die.net/man/3/alloca): funzione di allocazione piuttosto particolare (alloca dinamicamente nello stack frame), non POSIX, di origine probabilmente BSD-iana.

AllerITA
06-05-2012, 07:41
UP ho corretto un errore grave e fuorviante che potrebbe portare dei problemi al programma.


//è corretto cosi:
*(mat+(j+i*maxy))=0; // mat[i][j]=0