Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-06-2010, 16:14   #1
lupoxxx87
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
__________________
Quote:
Originariamente inviato da piccolino Guarda i messaggi
l'html si può considerare benissimo un linguaggio di programmazione web. se vogliamo dirla tutta anche css... è come programmare in c++
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2010, 16:39   #2
lupoxxx87
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]);
	}
}
__________________
Quote:
Originariamente inviato da piccolino Guarda i messaggi
l'html si può considerare benissimo un linguaggio di programmazione web. se vogliamo dirla tutta anche css... è come programmare in c++
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2010, 17:07   #3
Kenger
Member
 
Iscritto dal: Aug 2005
Messaggi: 168
Risposta perfetta
Kenger è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2010, 17:26   #4
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
Quote:
a chi potesse interessare....
traduzione passaggio puntatore:

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>
traduzione passaggio della copia:

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>
L'indirizzo è univoco. Pertanto SIGSEGV è corretto.
Quindi se non sbaglio lea non sposta l'indirizzo ma l'effettivo contenuto, ovvero l'indirizzo di 'vettore'.

C is powerful!
grazie, lupoxxx87
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2010, 00:00   #5
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da lupoxxx87 Guarda i messaggi
(ps: fero86 non dire che è un thread inutile perchè il C ti fa pena xD)
OMG ha creato una fobia!

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!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2010, 00:06   #6
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da Teo@Unix Guarda i messaggi
Quindi se non sbaglio lea non sposta l'indirizzo ma l'effettivo contenuto, ovvero l'indirizzo di 'vettore'.
Per l'esattezza fa il contrario, cioè invece di spostare il contenuto sposta l'indirizzo (il contenuto è un int *, l'indirizzo sarà un int **).

ciao
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2010, 14:05   #7
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Per l'esattezza fa il contrario, cioè invece di spostare il contenuto sposta l'indirizzo (il contenuto è un int *, l'indirizzo sarà un int **).

ciao
si, scusa ho confuso....
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Missione Artemis II diretta verso la Lun...
Toy Story 5 arriva al cinema: è l...
Intel cambia rotta su Linux? Nuove assun...
Samsung aggiorna Bixby con One UI 8.5: p...
L'Etiopia vieta le auto a combustione: a...
Pirateria audiovisiva: la Guardia di Fin...
Ubisoft conferma due nuovi Far Cry in sv...
Chi vincerà il Festival di Sanrem...
G42 e Cerebras portano in India un super...
Offerte aggiornate del weekend Amazon: 7...
4 MacBook Air in offerta e scende a 939€...
Chrome cambia il tuo modo di lavorare: o...
Minimo storico iPhone 17 su Amazon: 909€...
USA, incriminati tre ingegneri della Sil...
Xbox: Phil Spencer lascia dopo 38 anni, ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:52.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v