Problema con vettore multidimensionale

di il
3 risposte

Problema con vettore multidimensionale

Il mio problema è il seguente: nella funzione main dichiaro un vettore cubic a tre dimensioni

int cubic[a][b][c];
Dopo aver elaborato un input utente, devo passare il vettore a delle altre funzioni che operano su questo array, ma non so come dichiarare le funzioni.

Per esempio questo è corretto?

void roto(int cubic[], int cube, int row, bool direction, int nrot)
{
    int tmp[cube];
    int i;

    while(nrot-- > 0)
    {
    for(i = 0; i <= cube - 2; i++)
    {
      memcpy(tmp, cubic[i + 1][row], 10);
      memcpy(cubic[i + 1][row], cubic[0][row], 10);
      memcpy(cubic[0][row], tmp, 10);
    }
    }
}

3 Risposte

  • Re: Problema con vettore multidimensionale

    Se è costante usa la prima funzione altrimenti la seconda
    
    #define a 1
    #define b 2
    #define c 3
    void funz1 (int cubic[][b][c])
    {
    }
    void funz2 (int *cubic, int x, int y, int z)
    {
    }
    int main ()
    {
      int cubic[a][b][c];
      int x,y,z;
      
      funz1 (cubic);
      funz2 (&cubic[0][0][0],x,y,z);
      return 0;
    }
    
  • Re: Problema con vettore multidimensionale

    Perchè dopo aver allocato dinamicamente il vettore a tre dimensioni cubic, posso accedere ad esso, ad esempio per stampare un valore che contiene(printf("%i", cubic[num][num][num])), ma non riesco ad utilzzare memcpy:
    
    memcpy(cubic, mio_array, sizeof(mio_array));
    
    mio_array è un array monodimensionale della stessa grandezza di cubic.
  • Re: Problema con vettore multidimensionale

    Qual'è il problema?
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define a 1
    #define b 2
    #define c 3
    int main()
    {
      int cubic[a][b][c];
      int *pcubic=&cubic[0][0][0];
      int *newcubic;
      
      newcubic=(int *)malloc (sizeof(cubic));
      if (!newcubic)
      {
    	fprintf (stderr,"out of memory\n");
    	return -1;
      }
      
      memcpy (newcubic,pcubic,sizeof(cubic));
      
      free (newcubic);
      
      return 0;
    
    }
    
    Verifica:
    
    gcc -g -Wall prova.c
    max@studio:~> 
    max@studio:~> valgrind ./a.out 
    ==20783== Memcheck, a memory error detector
    ==20783== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
    ==20783== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
    ==20783== Command: ./a.out
    ==20783== 
    ==20783== 
    ==20783== HEAP SUMMARY:
    ==20783==     in use at exit: 0 bytes in 0 blocks
    ==20783==   total heap usage: 1 allocs, 1 frees, 24 bytes allocated
    ==20783== 
    ==20783== All heap blocks were freed -- no leaks are possible
    ==20783== 
    ==20783== For counts of detected and suppressed errors, rerun with: -v
    ==20783== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4)
    max@studio:~> 
    
Devi accedere o registrarti per scrivere nel forum
3 risposte