2010-12-20 7 views
0
#include <stdio.h> 
#include <stdlib.h> 

void push(int p) 
{ 
    static int i=0; 
    int b; 
    int *ptr =(int *)malloc((10)*sizeof(int)); 
    ptr[i]=p; 
    for(b=0;b<=i;b++){ 
    printf("%d",ptr[b]); 
    printf("\n"); 
    } 
    i++; 
} 
int main() 
{ 
    int a; 
    while(1) 
    { 
    scanf("%d",&a); 
    push(a); 
    } 
} 

新しい値を入力すると、関数は古いエントリを保持しません。私は古いエントリを保持することはできません

+1

静的ptrを一度だけ、それを割り当ててください。 –

+0

コードマークアップ( '{}')を使用して、コードを明確にフォーマットしてハイライトしてください。 – MAK

答えて

1

push()を呼び出すたびに、新しいメモリが10個の整数を保持するように割り当てられます。あなたはそのメモリへのポインタを保存するために何もしていません。

これはメモリを割り当てているが、決して解放しないので、メモリリークと呼ばれます。 push()を十分に呼び出すと、メモリ不足になる可能性があります。

1

一度割り当てる必要があります。現時点では、関数のプッシュを呼び出すたびにメモリリークを作成しています。いったん機能を残すと、誰もメモリを参照しません。情報を静的に保つことができます。また、あなたはまだあなたが情報を保存する場所に渡すことができます良い10

void push(int p) 
{ 
    static int i=0; 
    static int *ptr =(int *)malloc((10)*sizeof(int)); // To keep the values 
    int b; 
    ptr[i]=p; 
    for(b=0;b<=i;b++){ 
     printf("%d",ptr[b]); 
     printf("\n"); 
    } 
    i++; 
    if(i >= 10) i = 0; // To make sure there is no overflow 
} 

で保持できる値の数を制限していることに注意してください。

void push(int p, int *ptr) 
{ 
    static int i=0; 
    int b; 
    ptr[i] = b; 
    for(b=0;b<=i;b++){ 
     printf("%d",ptr[b]); 
     printf("\n"); 
    } 
    i++; 
    if(i >= 10) i = 0; // To make sure there is no overflow 
} 
int main() 
{ 
    int a; 
    int values[10]; 
    while(1) 
    { 
     scanf("%d",&a); 
     push(a, values); 
    } 
} 
+0

さらに複雑にする必要はありません。しかしそれはよく言われました。 – karlphillip

+0

これらは私の問題を解決しますが、私はこの問題のためにmallocとreallocを使用しなければなりません。static int * ptr =(int *)malloc((10)* sizeof(int));私は間違いを犯す – justuser

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

void push(int p) 
{ 
    static int i = 0; 
    static int ptr[10]; // since you are NOT freeing this memory later, 
         // there's no need to use malloc. 
    ptr[i] = p; 

    int b; 
    for (b = 0; b <= i; b++) 
    { 
     printf("ptr[%d] --> %d\n", b, ptr[b]); 
    } 

    printf("\n"); 

    i++; 
} 

int main() 
{ 
    int a; 
    while(1) 
    { 
     scanf("%d",&a); 
     push(a); 
    } 

    return 0; // main() expects you to return something, remember? 
} 
関連する問題