2016-05-27 7 views
2

Ich habe diesen Code verwendet, um Werte für Array data einzufügen, aber als ich versuchte, die Werte 8 1 2 3 4 5 6 7 8 (die erste Zahl 8 ist die Größe des Arrays), war die Ausgabe 00000000 anstelle der Eingabewerte 1 2 3 4 5 6 7 8. Irgendeine Idee, wie ich das Programm zum Laufen bringen kann?Einfügen eines Werts für ein Array mit malloc

#include<stdio.h> 
#include<stdlib.h> 

int main() 
{ 
    int n,i,*data; 

    scanf("%d", &n); 

    data=(int *)malloc(sizeof(int)*n);//data[size] 

    for(i=0;i<n;i++) 
    { 
    scanf("%d", &data[i]); 
    } 

    for(i=0;i<=n;i++) 
    printf("%d",data[n]); 
    printf("\n"); 

    return 0; 
} 
+1

Sie haben einen Tippfehler 'printf ("% d", data [n]);' -> 'printf ("% d", Daten [i]);' – LPs

+1

Ich schlage vor, dass Sie sich selbst einen Gefallen tun und lernen, wie man Debugger verwendet. Es wird dir helfen, triviale Fehler wie diese schnell zu finden. – user694733

+0

Auch 'i <=n' -->' i Lundin

Antwort

2

Sie benötigen diesen Teil zu ändern:

for(i=0;i<=n;i++) 
    printf("%d",data[n]); 
    printf("\n"); 
    return 0; 
} 

zu:

for(i = 0; i < n; i++) 
    printf("%d",data[i]); 
    printf("\n"); 
    return 0; 
} 

Was Sie jetzt tun iteriert aber nicht die Variable i als Index. Stattdessen versuchen Sie ständig, nur data[n] zu drucken. Dies wird der Zugriff auf Index außerhalb der Grenzen wie in , startet ein Arrays Indizes von 0 und erreicht n-1, wo n die Größe des Arrays ist. Dies kann zu [Tag: undefiniertes Verhalten] Ihres Programms führen.

So Ihre for Schleife wird entweder sein:

for(i = 0; i < n; i++) 

oder:

for(i = 0; i <= n-1; i++) 

Werfen Sie auch einen Blick auf dieses link on why you should not cast the result of malloc. Darüber hinaus stellen Sie sicher, dass Sie immer das Ergebnis von malloc überprüfen, wie folgt aus:

data=malloc(sizeof(int)*n); 
if (data == NULL) 
    printf("Error in dynamically allocating memory.\n"); 
2
  1. Die Druckschleife i als Index verwendet werden soll und nicht n wie Sie
  2. Die Schleife zu n-1 gehen haben, Der korrekte Zustand muss i<n sein. Ihr Code greift auf das "Array" außerhalb der Grenzen zu, das Undefined Behavior
  3. aufruft Sie müssen immer Funktionsrückgabewerte überprüfen.
  4. Seitliche Anmerkung: mit you shouldn't cast malloc return.

-Code

#include<stdio.h> 
#include<stdlib.h> 

int main() 
{ 
    size_t n,i; 
    int *data; 

    printf("Insert number of items: "); 
    scanf("%zu", &n); 

    data=malloc(sizeof(int)*n); 

    if (data != NULL) 
    { 
     for(i=0;i<n;i++) 
     { 
      printf("Insert value for item %zu: ", i+1); 
      scanf("%d", &data[i]); 
     } 

     printf("You inserted: "); 

     for(i=0;i<n;i++) 
      printf("%d ",data[i]); 
    } 
    else 
    { 
     fprintf(stderr, "Failed allocating memory\n"); 
    } 

    printf("\n"); 

    return 0; 
} 
Verwandte Themen