如何在/bin/ksh
中找到30分钟的文件?
答案 0 :(得分:1)
第一次for循环运行获得(..)3次,第二次4次,但最后一次没有for循环的主体
答案 1 :(得分:0)
首先要做的事情:请告诉我你永远不会在生产代码中使用它。这是一堆cr * p。
关于两者之间差异的问题,让我们看看。
在第一个循环中,您在使用gets()
之前检查条件,这意味着循环执行了三次。
在第二个循环中,您在检查循环条件之前使用gets
,因此执行了四次。循环本身永远不会被执行,或者我们的数组边界会有问题。
令我惊讶的是,这两个循环都没有抱怨(好吧,执行时,有这个“警告:这个程序使用了gets(),这是不安全的。”消息,但是哦,好吧;什么不是程序?)。
作为参考,我用它作为参考(请注意我尽力使它...运行):
#include <stdio.h>
#define MAX 3
int main(){
char names[MAX][MAX];
char *nameptr[MAX];
int n;
for(n = 0; n < MAX; n++){
nameptr[n] = gets(names[n]);
printf("%s", nameptr[n]);
}
for(n = 0; gets(names[n]) && n < MAX; n++){
nameptr[n] = names[n];
printf("%s", nameptr[n]);
}
free(nameptr);
return 0;
}
这可能是我写过的最糟糕的代码,但这没关系。我的Mac必须忍受这一点。如上所述,该程序实际运行。如果你仔细观察,你会注意到除了最后一个输入之外所有输入都是重复的(因为那个时间printf()
永远不会被调用)。
但是valgrind告诉我们什么(记忆检查器)?这与问题无关,但它是你弄乱你的记忆所得到的。
当我运行valgrind --leak-check=full ./a.out
时,这是摘要:
==12822== HEAP SUMMARY:
==12822== in use at exit: 33,265 bytes in 376 blocks
==12822== total heap usage: 453 allocs, 77 frees, 39,233 bytes allocated
==12822==
==12822== LEAK SUMMARY:
==12822== definitely lost: 0 bytes in 0 blocks
==12822== indirectly lost: 0 bytes in 0 blocks
==12822== possibly lost: 0 bytes in 0 blocks
==12822== still reachable: 8,192 bytes in 2 blocks
==12822== suppressed: 25,073 bytes in 374 blocks
==12822== Reachable blocks (those to which a pointer was found) are not shown.
仅供参考,当我删除对free()
的调用时(我真的在没有* alloc的情况下使用它,不是吗?),这就是:
==12818== HEAP SUMMARY:
==12818== in use at exit: 33,265 bytes in 376 blocks
==12818== total heap usage: 453 allocs, 77 frees, 39,233 bytes allocated
==12818==
==12818== LEAK SUMMARY:
==12818== definitely lost: 0 bytes in 0 blocks
==12818== indirectly lost: 0 bytes in 0 blocks
==12818== possibly lost: 0 bytes in 0 blocks
==12818== still reachable: 8,192 bytes in 2 blocks
==12818== suppressed: 25,073 bytes in 374 blocks
完全相同。奇怪,是吧?嗯,不是那么多,因为没有明确分配任何东西,所以它怎么能被释放?我正要测量运行时效率,但我真的太懒了。
同样,这段代码确实非常非常糟糕。