[C][Risolto] Dimensione in byte di una matrice

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
alukard990
Prode Principiante
Messaggi: 187
Iscrizione: venerdì 14 febbraio 2014, 16:03
Desktop: Mate
Distribuzione: 20.04, 64bit

[C][Risolto] Dimensione in byte di una matrice

Messaggio da alukard990 »

Salve a tutti, sto scrivendo un piccolo programmino in C il quale, tra le varie cose, deve allocare dinamicamente e in uno spazio contiguo di memoria una matrice quadrata.
Vi posto subito lo spezzone di codice:

Codice: Seleziona tutto

matr=(float**)malloc(sizeof(float*)*rows);
		memory=(float*)malloc(rows*rows*(sizeof(float)));
		for(i=0;i<rows;i++)
			matr[i]=&(memory[i*rows]);
		srand(time(NULL));
		printf("Matrice generata:\n");
		for(i=0;i<rows;i++){
			for(j=0;j<rows;j++){
				matr[i][j]=((float)rand()/(float)RAND_MAX)*20;
				printf("%f ",matr[i][j]);
				if(j==rows-1)
					printf("\n");
			}
		}
		printf("Dimensiore in byte matrice => %ld \n",sizeof(memory));
Ora voglio conoscere la dimensione totale in byte occupata dalla matrice, a tal proposito ho utilizzato la funzione sizeof. Se la matrice fosse 4x4 mi aspetterei (dato che lavoro su 64 bit) che la matrice sia di 64 byte, ma a video mi viene mostrato che essa ne occupa 8. Sto sbagliando qualcosa? Grazie mille per le risposte.
Ultima modifica di alukard990 il venerdì 17 febbraio 2017, 8:04, modificato 1 volta in totale.
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [C] Dimensione in byte di una matrice

Messaggio da melfnt »

Con i puntatori non si può:

Codice: Seleziona tutto

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

int main ()
{
	int dim = 4;
	int mat[dim][dim];
	int **mat_ptr = malloc ( dim * sizeof (int*) );
	for ( int i=0; i<dim; ++i )
	{
		mat_ptr[i] = malloc ( dim * sizeof (int) );
	}
	
	printf ("dimensione di mat_ptr   : %lu\n", sizeof (mat_ptr));
	printf ("dimensione di mat_ptr[0]: %lu\n", sizeof (mat_ptr[0]));
	
	printf ("dimensione di mat   : %lu\n", sizeof (mat));
	printf ("dimensione di mat[0]: %lu\n", sizeof (mat[0]));
		
	return 0;
}
output:

Codice: Seleziona tutto

dimensione di mat_ptr   : 8
dimensione di mat_ptr[0]: 8
dimensione di mat   : 64
dimensione di mat[0]: 16
Il valore ritornato da sizeof è correto: il doppio puntatore ad interi occupa 8 Byte (=64 bit) in un'architettura a 64 bit. Il valore a cui punta è un puntatore ad intero, che occupa anch'esso 8 Byte.
Invece l'array statico è allocato tutto nello stack, e occupa 64 Byte.

Ci sono dei modi per ottenere la dimensione di un buffer allocato con la malloc, ma niente di standard e niente di sicuramente funzonante, perciò non ti incollerò un link. Li puoi trovare cercando sul web a tuo rischio e pericolo.

(;
alukard990
Prode Principiante
Messaggi: 187
Iscrizione: venerdì 14 febbraio 2014, 16:03
Desktop: Mate
Distribuzione: 20.04, 64bit

Re: [Risolto][C] Dimensione in byte di una matrice

Messaggio da alukard990 »

Hai ragione lo avevo dimenticato :D Grazie lo stesso
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti