|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jan 2020
Messaggi: 17
|
esercizio malloc() chiedo suggerimenti (PRINCIPIANTE)
Volevo solo chiedere un'occhiata al codice e delle eventuali correzioni sull'allocazione dinamica..poichè un po insicuro sull'argomento.
Ecco il codice..sembra funzioni. Codice:
#include <stdio.h> #include <stdlib.h> int* carica(int* c); int* negativi(int* A,int n,int* c); int* pari(int* A,int n,int* c); int main(){ int* A; int* B; int i,n; int* c=&n; A=carica(c); //carico vett printf("stampo vettore dopo la carica\n"); for(i=0;i<n;i++) //stampo vett printf("%d\n",*(A+i)); printf("stampo vettore dopo la f pari\n"); B=pari(A,n,c); for(i=0;i<n;i++) //stampo vett printf("%d\n",*(B+i)); free(A); free(B); } //----------------------------------------xmalloc per all.dinamica void* xmalloc(int n){ void* A; A=malloc(n * sizeof(int)); if(A==NULL) fprintf(stderr,"errore durante l'allocazione\n"); return A; } //---------------------------------------carica un vettore int *carica(int *c){ int* A; int i; int n; printf("quanti elementi vuoi inserire?\n"); scanf("%d",&n); A=xmalloc(n); for(i=0;i<n;i++) scanf("%d",A+i); *c=n; return A; } //----------------------------------cerco i numeri pari int* pari(int A[],int n,int* c){ int i,j; int* B; int count=0; for(i=0;i<n;i++){ if(A[i]%2==0) count++; } *c=count; B=xmalloc(count); j=0; for(i=0;i<n;i++){ if(A[i]%2==0){ B[j]=A[i]; j++; } } return B; } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Codice:
int* c=&n; A=carica(c); xmalloc?? --> stampa il messaggio, ma poi in carica non verifichi se A==null...quello è un bug inoltre esiste xmalloc in alcuni sistemi operativi, come funzione non standard...potresti avere delle collisioni poi A+i in scanf, è corretto, ma non idiomatico...usa &A[i] stessa cosa per *(A+i)...usa A[i] usa gli indici per accedere ad un array...e si, un puntatore ad un'area di memoria allocata dinamicamente, contenente n elementi tutti dello stesso tipo, è un array per il resto, a prima vista, non vedo errori |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:42.