数组旋转的运行时错误

时间:2018-08-01 16:14:00

标签: c arrays

下面的代码应该将数组A旋转B个位置。

例如,

A:[1 2 3 4 5 6]
B:1

输出:

[2 3 4 5 6 1]

我的代码是

(我只是一个初学者,因此代码如此复杂)

int* rotateArray(int* A, int n1, int B, int *len)
{
   int *ret = (int *)malloc(n1 * sizeof(int));
   *len = n1;
   int i=0;
   int J=0;
   int t=0;
   t=(i+B)%n1;
   if((i+B)>=n1)
   {
      for(i=t;i<n1;i++)
      {
         ret[J]=A[i];
         J++;

      }
      for(i=0;i<n1;i++)
      {
         ret[J]=A[i];
         J++;

      }
      return ret;
   }
   else
   {
      J=0;
      for (i = 0; i < n1; i++) 
      {
         if((i+B)<n1)
         {
            ret[i] = A[i + B];
         }
         else
         {
            ret[i]=A[J];
            J++;
         }
      }
      return ret;
   }
}

我遇到运行时错误 运行时错误。由于运行时错误,您的提交停止了。例如:被零除,数组索引超出范围,未捕获的异常您可以尝试使用自定义输入测试代码,并尝试在代码中放入调试语句。

*`./solution'中的错误:free():下一个大小无效(快速):0x00000000009640a0 *

中止

您的提交遇到以下输入的运行时错误:

A:[14,5,14,34,42,63,17,25,39,61,97,55,33,96,62,32,98,77,35]

B:56

此测试用例的预期输出为:

35 14 5 14 34 42 63 17 25 39 61 97 55 33 96 62 32 98 77

我不知道为什么! 我所有的测试用例都是正确的

2 个答案:

答案 0 :(得分:0)

您在第二个for循环中循环太多,并且在分配的输出数组的末尾进行写操作(因为您总是在递增J)。所以改变

   if((i+B)>=n1)
   {
      for(i=t;i<n1;i++)
      {
         ret[J]=A[i];
         J++;

      }
      for(i=0;i<n1;i++)
      {
         ret[J]=A[i];
         J++;

      }
      return ret;
   }

成为:

   if((i+B)>=n1)
   {
      for(i=t;i<n1;i++)
      {
         ret[J]=A[i];
         J++;

      }
      for(i=0;i<t;i++) // ichanged the stop condition here from i<n1 to i<t
      {
         ret[J]=A[i];
         J++;

      }
      return ret;
   }

答案 1 :(得分:0)

您的代码似乎比必要的时间更长。这应该足够了:

models.TextField(name="foo", db_column="something_else")

我删除了一个参数,因为您所做的就是将其分配给另一个参数的值。