【发布时间】:2010-09-18 23:04:26
【问题描述】:
我正在为一项任务实现tail。我让它正常工作,但我似乎在随机时间免费收到错误。
我看不到,要追查到一个模式或除此之外的任何东西是一致的。
例如,如果我将我的程序称为“tail -24 test.in”,我会在多次运行的同一行中得到不正确的校验和错误。但是,如果要打印不同的文件甚至不同的行数,我会毫无错误地返回。
关于如何追踪问题的任何想法,我一直在尝试调试它几个小时无济于事。
这是有问题的代码:
lines 被定义为一个 char** 并且被 malloc 为:
lines = (char**) malloc(nlines * sizeof(char *));
void insert_line(char *s, int len){
printf("\t\tLine Number: %d Putting a %d line into slot: %d\n",processed,len,slot);
if(processed > numlines -1){//clean up
free(*(lines+slot));
*(lines + slot) = NULL;
}
*(lines + slot) = (char *) malloc(len * sizeof(char));
if(*(lines + slot) == NULL) exit(EXIT_FAILURE);
strcpy(*(lines+slot),s);
slot = ++processed % numlines;
}
【问题讨论】:
-
是基于插槽 0 还是插槽 1?插槽永远不会超过 nlines-1,对吗?
-
正确的模数自动回到0左右
-
您使用的是哪个编译器和调试器?根据这一点,他们可能能够为调试您的问题提供一些帮助。
-
我建议用 lines = (char **) calloc(nlines, sizeof(char *)); 替换原来的 malloc 行calloc 的优点是内存为您清零,因此您将从所有 NULL 指针开始。
标签: c debugging pointers malloc