如果我有以下代码,我在主函数中分配我的内存,然后将它传递给一个函数,它会像这样为我填充它:
main()
{
char *bar = (char*) malloc(sizeof(char));
while(1)
{
foo(bar);
free(bar);
bar = (char*) malloc(sizeof(char));
}
}
foo(char *bar)
{
int c;
int i = 0;
while((c = getchar()) != '\n' && c != EOF)
{
bar[i++] = c;
bar = (char*) realloc(bar, sizeof(char) * (i+1));
}
}
几次输入后我得到一个段错误。但是,如果我这样做:
main()
{
char *bar;
while(1)
{
bar = foo();
free(bar);
}
}
char *foo()
{
char *bar = (char*) malloc(sizeof(char));
int c;
int i = 0;
while((c = getchar()) != '\n' && c != EOF)
{
bar[i++] = c;
bar = (char*) realloc(bar, sizeof(char) * (i+1));
}
return bar;
}
,即把内存分配给函数,一切似乎工作正常。这是为什么?