查找动态数组中最长的负序列

时间:2015-12-26 17:54:21

标签: c

好吧,我编写的代码基本上是这样的:

  1. 要求数组长度

  2. 用户将数组输入* p

  3. longestNeg函数检查最长的负序。

  4. 它需要做什么:返回最长的负序及其值。

    问题:在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)

2 个答案:

答案 0 :(得分:1)

两个问题:当循环完成时,指针p指向超出分配的内存的末尾。第二个问题是你的问题的原因:你将一个指针传递给你的函数指针,它指出了一个指针,导致未定义的行为

你应该学习总是为你的所有函数创建函数原型声明,因为编译器能够捕获它并打印错误而不是只是给你一个警告(你应该得到它)。

答案 1 :(得分:1)

.....为了对负数进行计数,您将arr递增过来,同时检查它们是否为负数,如果是,则为counter。然后,您尝试打印来自counter的{​​{1}}个数字,现在在之后指向序列。

所以,想一想。想象一下,你是一台电脑。人类已进入arr。你计算 - 并增加过去 - 4个负数。您的指针1, 2, -1, -2, -3, -4, 3, 4现在指向倒数第二个值arr。然后,用户会要求您从此3开始打印counter == 4个值。 只剩下属于用户分配的内存区域的2个值 - 即最后一对,33

通过尝试使用不属于它们的内存,用户调用未定义的行为,并且该程序完全有权完成绝对任何(未定义的行为) - 包括segfaulting因为它似乎在你的系统上。

所以,停止这样做。在第一个或两个4循环中使用传入指针arr的临时副本,或者在同一循环中进行计数和打印。它真的很简单。

作为一种可以帮助你实际考虑你已经编程的事情的诊断策略,如果你还没有完成,那就像你是计算机一样,不要低估这个问题。