这个题目什么意思啊
K&R C 练习5-7 重写函数readlines,将输入的文本行存储到由main函数提供的一个数组中,而不是存储到调用alloc分配的存储空间中。该函数的运行速度比改写前快了多少?
写在main函数的一个数组和存储到alloc分配的存储空间 有何区别?新人不懂啊。
int readline(char *lineptr[], int maxlines)
{
int len, nlines; //nlines 会读入行数
char *p, line[MAXLINE];
nlines = 0;
while(len = getline(line, MAXLINE) > 0)
if(nlines > maxlines || (p = alloc(len)) == NULL)
return -1;
else
{
line[len-1] = '\0';
strcpy(p, line); //这里把数组名赋给p,然后p在给lineptr 这样可以吗?
lineptr[nlines++] = p;
}
return nlines;
}
[解决办法]
额,说错了,这种方式不可行,因为,你这样穿数组是传值,是将数组赋值一份传过来,这个函数,将p赋值给指针数组,并没有对外面的数组的值进行改写,而是对传进来的,复制过的一份的值进行改写,如此,函数退出,局部变量释放,你自己分配的内存,收不回来了。内存泄露了。
[解决办法]
如果不用p来传值的话两个指针就指向了同一个地址空间line[MAXLEN],而line[MAXLIEN]是一个局部变量,函数调用结束后局部变量就会销毁,那时候另外一个就成了野指针。所以要用p先分配内存。