Pages: [1]   Go Down
Print
Author Topic: problema puntatori programma in C  (Read 2739 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« on: 07-07-2010, 15:54:52 »

Salve ragazzi , avrei un problema con questo programma in C , praticamente questo programma dovrebbe caricare in un puntatore di array gli int che io inserisco con il for e poi dovrebbe stampare tali valori nel prossimo for. C'è un problema però..

Il programma viene compilato perfettamente , ma al momento della stampa dei valori dell'array il programma crasha , qualcuno saprebbe darmi una mano?

Code:
#include <stdio.h>
#include <conio.h>


int main()
{
    int dim=10;
    int *p;
    int i= 0;
   
   
   
    p = (int *)malloc(dim*sizeof(int));

    for(i=0; i <= 10;i++)
    {
        printf("\nSeleziona valore da caricare nell'array:");
        scanf("%d",&p+i);
    }   
   
   
    for(i=0; i <= 10;i++)
    {
        printf("\nIl valore dell'array e'%d",*(p+i));
    }
   
    getch();
}
Logged
Mario Di Raimondo
Moderator
Apprendista Forumista
*****
Offline Offline

Posts: 223


WWW
« Reply #1 on: 07-07-2010, 16:04:53 »

Mi sembra proprio strano che compili senza problemi...

A occhio mi sembra che il problema stia nell'espressione: &p+i
Lo scanf vuole un puntatore ad intero (int *) e così facendo lei sta passando un puntatore ad un puntatore ad intero (int **). L'aritmetica dei puntatori dice che dovrebbe bastare p+i.
Logged
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #2 on: 07-07-2010, 18:51:10 »

grazie professore^^

scusi per l'errore un pò banale.
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #3 on: 07-07-2010, 19:34:25 »

Esiste un secondo errore che quasi certamente non produrrà problemi in esecuzione, solo per il fatto che oramai la memoria è mappata su pagine di almeno 4kb (in particolare la memoria allocata dinamicamente con malloc), mentre tu allochi solo presumibilmente 40 bytes: i cicl iterano fin'anche compreso il caso i=10, in cui si tenterà di accedere prima in scrittura e poi in lettura a una locazione di memoria non ufficialmente allocata (ma ripeto, la pagina di cui fa parte probabilmente sarà libera boh).

In più, visto che hai definito la variabile dim (che andrebbe definita come costante, meglio se con #define), è meglio usare tale valore per limitare le iterazioni nei cicli .

 
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #4 on: 08-07-2010, 15:02:09 »

Avrei un altro piccolo problema stavolta e con i puntatori di stringhe e con la funzione strcat.

quando cerco di stampare il valore contenuto in stringa 1 che dovrebbe essere diventato la concatenazione di stringa1 e stringa2 avviene un crash di tutto il programma c. Ecco qua il codice...

Code:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    
    char *stringa1[10];
    char *stringa2[10];


    
    printf("\nInserisci valore stringa 1:");
    scanf("%s",stringa1);
    
    printf("\nInserisci valore stringa 2:");
    scanf("%s",stringa2);
    
    char *strcat(char *stringa1 ,char *stringa2);
    printf("\nstringa1: %s ", *stringa1);
    
    
    getch();
    
}


Da notare che il mio obiettivo è quello di concatenare stringa1 e stringa2
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #5 on: 08-07-2010, 16:31:55 »

Hai sbagliato a definire il tipo di stringa1 e stringa2, e conseguenzialmente hai fatto delle dereferenziazioni inopportune .

EDIT; avevo sbagliato tag
« Last Edit: 08-07-2010, 17:29:09 by reversengineer » Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #6 on: 08-07-2010, 16:54:12 »

sono riuscito a farlo togliendo i puntatori . usando strcat senza i puntatori mi funziona perfettamente.
L'unico problema che vorrei farlo usando i puntatori.
« Last Edit: 08-07-2010, 17:16:13 by Alex_47 » Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #7 on: 08-07-2010, 17:59:50 »

Beh, io non posso far altro che invitarti a ripassare cosa è il "tipo di dati" puntatore a qualcosa, e a comprendere l'identità:
&mioarray [0] == mioarray

ove mioarray è una variabile di tipo array o un segnaposto per una qualsiasi espressione valutabile con tipo puntatore a qualcosa (ad esempio potrebbe essere una espressione di tipo char *).
 
« Last Edit: 09-07-2010, 00:59:08 by reversengineer » Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Pages: [1]   Go Up
Print
Jump to: