alt text

Spero si capisca che nel programma della foto cerco di far accettare al compilatore 2 array A e B per poi stampare a video tutti gli elementi dell'array.

Ma quando vado a eseguire il programma durante il primo ciclo for mi da ERRORE DI SEGMENTAZIONE (CORE DUMP CREATO).

Utilizzo linguaggio C, e compilo i programmi con VIM.

Grazie in anticipo

chiesto 23 Nov '15, 13:42

danieleXubu's gravatar image

danieleXubu
14678

modificato 23 Nov '15, 15:21

dadexix86's gravatar image

dadexix86 ♦♦
17.0k916161


La funziona scanf, per modificare la variabile che gli viene data in input, ha bisogno del suo indirizzo.
Quindi, così come usi &n per leggere il numero di elementi dell'array, allo stesso modo devi usare &A[i] e simili per leggere gli elementi dell'array.

Aggiungo che il compilatore con tutta probabilità ti ha segnalato la cosa come warning, che tu hai ignorato.

coll. permanente

ha risposto 23 Nov '15, 14:10

enzotib's gravatar image

enzotib ♦♦
14.1k113187

-1

non so se nel C agli array viene allocata memoria alla dichiarazione, io userei un puntatore per evitare beghe. quindi

int* A=new int [100];
coll. permanente

ha risposto 26 Nov '15, 19:13

airordl's gravatar image

airordl
407596976

modificato 26 Nov '15, 19:46

enzotib's gravatar image

enzotib ♦♦
14.1k113187

a beneficio della chiarezza, ma credo tu ne sia già a conoscenza, un core dump viene creato quando si tenta di accedere a della memoria per la quale non è stato riservato uno spazio. In realtà, il seg-fault avviene quando si vuole accedere ad una memoria riservata ad un altro puntatore, quindi può capitare che ad un esecuzione del programma non si verifichino intoppi (basta beccare un pezzo di memoria libera) anche scrivendo 'A[100];' quando nella dichiarazione hai scritto '=new int[100];', ma è come vincere al lotto.

(26 Nov '15, 19:18) airordl airordl's gravatar image

@airordl: questo non è C, è C++, e comunque C allora l'array sullo stack se lo dichiari all'inizio di un blocco con l'idioma type name[costante];

(26 Nov '15, 19:45) enzotib ♦♦ enzotib's gravatar image

questo non è C, è C++

@enzotib In realtà l'utente che ha fatto la domanda ha scritto che è C (e non C++).

Nel caso in questione mi sento di dire che vada bene la dichiarazione, in quanto l'array viene allocato sullo stack. La dichiarazione suggerita da @airordl non va bene in quanto la keywork new non è presente in C.

(26 Nov '15, 21:37) corti-nico corti-nico's gravatar image

@corti-nico: appunto dicevo che quello che ha scritto @airordl non è C, quindi non risponde alla domanda.

(28 Nov '15, 21:52) enzotib ♦♦ enzotib's gravatar image

@enzotib, ah scusa credevo che il tuo messaggio fosse riferito alla domanda in testa e non al commento di @airordl, chiedo venia :)

(29 Nov '15, 15:52) corti-nico corti-nico's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×109
×23

domanda posta: 23 Nov '15, 13:42

domanda visualizzata: 3,123 volte

ultimo aggiornamento: 29 Nov '15, 15:52

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.