首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这个标题什么意思

2012-12-29 
这个题目什么意思啊K&R C 练习5-7 重写函数readlines,将输入的文本行存储到由main函数提供的一个数组中,而

这个题目什么意思啊
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赋值给指针数组,并没有对外面的数组的值进行改写,而是对传进来的,复制过的一份的值进行改写,如此,函数退出,局部变量释放,你自己分配的内存,收不回来了。内存泄露了。
[解决办法]
引用:
引用:实现方式不同而已,能有啥区别。
你这种方式可以的,只是,main函数调用完这个函数之后,记得对指针数组里保存的地址进行释放,因为这是你这个函数内malloc出来的空间。能不能解释一下 这里它为什么用到中间变量p来传值啊  line不是数组名吗  linepstr[nlines++]=p;这个  字符指针是怎么变化的啊 ? 
     ……

如果不用p来传值的话两个指针就指向了同一个地址空间line[MAXLEN],而line[MAXLIEN]是一个局部变量,函数调用结束后局部变量就会销毁,那时候另外一个就成了野指针。所以要用p先分配内存。

热点排行