я не могу хранить старые записи - PullRequest
0 голосов
/ 20 декабря 2010
#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);
    }
}

Когда я ставлю новые значения, функция не удерживает старые записи. Я жду ваших подсказок.

Ответы [ 3 ]

2 голосов
/ 20 декабря 2010
#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?
}
1 голос
/ 20 декабря 2010

Вы должны выделить только один раз.В данный момент вы создаете утечку памяти каждый раз, когда вызываете функцию push.Никто не обращается к памяти, как только вы выходите из функции.Вы можете сделать это статичным, чтобы сохранить информацию.Имейте в виду, что вы также ограничиваете количество значений, которое вы можете хранить на уровне 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
}

А еще лучше, если вы можете указать место, где вы хотите сохранить информацию.

1 голос
/ 20 декабря 2010

Каждый раз, когда вы вызываете push (), новая память выделяется для хранения 10 целых чисел.Вы ничего не делаете для сохранения указателя на эту память.

Это называется утечкой памяти, потому что вы выделяете память, но никогда не освобождаете ее.Если вы вызываете push () достаточное количество раз, у вас может не хватить памяти.

...