- 3,741
- 594
- CPU
- AMD Ryzen 7 5700X
- Dissipatore
- Noctua NH-D15
- Scheda Madre
- Gigabyte AX370 Gaming K7
- HDD
- Crucial P5 plus 1TB + 750GB SSD SATA + 14TB HDD
- RAM
- 16GB DDR4 G-Skiill Trident Z RGB 3200Mhz CL16
- GPU
- Zotac RTX 3060 TI Twin Edge
- Audio
- Integrata
- Monitor
- Xiaomi Mi Monitor 2K 1440P@165HZ
- PSU
- EVGA Supernova 650G2
- Case
- NZXT H440 Red
- Net
- EOLO 100
- OS
- Windows 11
Dovrei creare un programma nel quale bisognerebbe stabilire la dimensione di un puntatore all'interno di una funzione:
definendo la dimensione all'esterno funziona:
se usassi la malloc nella funzione, il vettore verrebbe letto correttamente ma nella stampa escono valori strani:
Ho letto che è bnecessario che usi un puntatore a un puntatore in questo modo:
in questo caso il programma si blocca alla lettura del secondo elemento, cioè quello di indice 1; anche se usassi la mallorc all'esterno della funzione, quindi nel main, utilizzando il puntatore a un puntatore otterrei lo stesso errore.
definendo la dimensione all'esterno funziona:
Codice:
#include "stdafx.h"
#include "stdlib.h"
void carica(int *p, int n);
void stampa(int *p, int n);
int main()
{
int *p = NULL;
int n;
printf("Inserisci il numero di elementi: ");
scanf("%d", &n);
p = (int *)malloc(sizeof(int) * n);
carica(p,n);
stampa(p,n);
}
void carica(int *p, int n)
{
for (int i = 0;i < n;i++)
{
printf("inserisci elemento %d: ", i + 1);
scanf("%d", &p[i]);
}
}
void stampa(int *p, int n)
{
for (int i = 0;i < n;i++)
{
printf("\nelemento %d: %d", i + 1,p[i]);
}
}
se usassi la malloc nella funzione, il vettore verrebbe letto correttamente ma nella stampa escono valori strani:
Codice:
#include "stdafx.h"
#include "stdlib.h"
void carica(int *p, int *n);
void stampa(int *p, int n);
int main()
{
int *p = NULL;
int n = NULL;
carica(p,&n);
stampa(p,n);
}
void carica(int *p, int *n)
{
printf("Inserisci il numero di elementi: ");
scanf("%d", &(*n));
p = (int *)malloc(sizeof(int) * (*n));
for (int i = 0;i < *n;i++)
{
printf("inserisci elemento %d: ", i + 1);
scanf("%d", &p[i]);
}
}
void stampa(int *p, int n)
{
for (int i = 0;i < n;i++)
{
printf("\nelemento %d: %d", i + 1,p[i]);
}
}
Ho letto che è bnecessario che usi un puntatore a un puntatore in questo modo:
Codice:
#include "stdafx.h"
#include "stdlib.h"
void carica(int **p, int *n);
void stampa(int *p, int n);
int main()
{
int *p = NULL;
int n = NULL;
carica(&p,&n);
stampa(p,n);
}
void carica(int **p, int *n)
{
printf("Inserisci il numero di elementi: ");
scanf("%d", &(*n));
(*p) = (int *)malloc(sizeof(int) * (*n));
for (int i = 0;i < *n;i++)
{
printf("inserisci elemento %d: ", i + 1);
scanf("%d", &(*p[i]));
}
}
void stampa(int *p, int n)
{
for (int i = 0;i < n;i++)
{
printf("\nelemento %d: %d", i + 1,p[i]);
}
}
in questo caso il programma si blocca alla lettura del secondo elemento, cioè quello di indice 1; anche se usassi la mallorc all'esterno della funzione, quindi nel main, utilizzando il puntatore a un puntatore otterrei lo stesso errore.