|
|||||||
|
|
|
![]() |
|
|
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: 04:21.



















