好吧,我编写的代码基本上是这样的:
要求数组长度
用户将数组输入* p
longestNeg函数检查最长的负序。
它需要做什么:返回最长的负序及其值。
问题:在longestNeg函数中(抛出异常)
$('a').click(function() {
switch ($(this).text()) {
case "L":
$('.box-inner').scrollLeft(-300);
break;
case "R":
$('.box-inner').scrollLeft(300);
break;
}
});
问题:为什么会这样?
问题2:if (*arr < 0) {
counter++;
}
会工作吗?
EDIT3:
while (arr < arr + n)
答案 0 :(得分:1)
两个问题:当循环完成时,指针p
指向超出分配的内存的末尾。第二个问题是你的问题的原因:你将一个指针传递给你的函数指针,它指出了一个指针,导致未定义的行为。
你应该学习总是为你的所有函数创建函数原型声明,因为编译器能够捕获它并打印错误而不是只是给你一个警告(你应该得到它)。
答案 1 :(得分:1)
.....为了对负数进行计数,您将arr
递增过来,同时检查它们是否为负数,如果是,则为counter
。然后,您尝试打印来自counter
的{{1}}个数字,现在在之后指向序列。
所以,想一想。想象一下,你是一台电脑。人类已进入arr
。你计算 - 并增加过去 - 4个负数。您的指针1, 2, -1, -2, -3, -4, 3, 4
现在指向倒数第二个值arr
。然后,用户会要求您从此3
开始打印counter
== 4个值。 但只剩下属于用户分配的内存区域的2个值 - 即最后一对,3
和3
。
通过尝试使用不属于它们的内存,用户调用未定义的行为,并且该程序完全有权完成绝对任何(未定义的行为) - 包括segfaulting因为它似乎在你的系统上。
所以,停止这样做。在第一个或两个4
循环中使用传入指针arr
的临时副本,或者在同一循环中进行计数和打印。它真的很简单。
作为一种可以帮助你实际考虑你已经编程的事情的诊断策略,如果你还没有完成,那就像你是计算机一样,不要低估这个问题。