#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);
}
}
当我输入新值时,功能不是保留旧条目。我等待你的帮助。
答案 0 :(得分: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?
}
答案 1 :(得分:1)
每次调用push()时,都会分配新内存来保存10个整数。你没有做任何事情来保存指向那个记忆的指针。
这称为内存泄漏,因为你正在分配内存,但你永远不会释放内存。如果你足够多次调用push(),你可能会耗尽内存。
答案 2 :(得分:1)
您必须只分配一次。每次调用函数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
}
更好的是,您可以传入要保存信息的位置。
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);
}
}