|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
[C] allocazione di memoria...
buongiorno a tutti...
vorrei porre una domanda particolare ai guru del C (ps: fero86 non dire che è un thread inutile perchè il C ti fa pena xD) riuscite a spiegarmi perchè un allocazione di memoria siffatta mi dia segmentation fault ? Codice:
#include <stdio.h>
#include <stdlib.h>
void crea (int *vettore, int dim) {
vettore = calloc (dim, sizeof(int));
vettore[3] = 5;
}
int main() {
int i, dim = 5;
int *vettore = NULL;
crea (vettore, dim);
for (i = 0; i < 5; i++) {
printf ("elemento %d: %d\n", i, vettore[i]);
}
}
dite che dovrei mettere un this.vettore all'interno di crea ? xD xD |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
mi autorispondo:
a chi potesse interessare.... nella chiamata di funzione, viene creata una copia locale del valore del puntatore, ovvero viene creata una variabile locale nel record di attivazione che punta alla stessa area di memoria. quindi la soluzione che stavo cercando dovrebbe essere Codice:
#include <stdio.h>
#include <stdlib.h>
void crea (int **vettore, int dim) {
*vettore = calloc (dim, sizeof(int));
(*vettore)[3] = 5;
}
int main() {
int i, dim = 5;
int *vettore = NULL;
crea (&vettore, dim);
for (i = 0; i < 5; i++) {
printf ("elemento %d: %d\n", i, vettore[i]);
}
}
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Aug 2005
Messaggi: 168
|
Risposta perfetta
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Quote:
Codice:
0x0804843f <main+27>: mov %eax,0x4(%esp) 0x08048443 <main+31>: lea -0x10(%ebp),%eax << ---- 0x08048446 <main+34>: mov %eax,(%esp) 0x08048449 <main+37>: call 0x80483f4 <crea> Codice:
0x08048439 <main+27>: mov %eax,0x4(%esp) 0x0804843d <main+31>: mov -0x10(%ebp),%eax << ---- 0x08048440 <main+34>: mov %eax,(%esp) 0x08048443 <main+37>: call 0x80483f4 <crea> Quindi se non sbaglio lea non sposta l'indirizzo ma l'effettivo contenuto, ovvero l'indirizzo di 'vettore'. C is powerful! grazie, lupoxxx87 |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Comunque, la tua autorisposta è corretta, ma ricorda di fare una free() per ogni allocazione...
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
ciao
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:52.




















