我在下面给出的代码中的函数func中传递int变量N的值。但是在执行func之后,N的值会发生变化。 我按价值通过N.有人可以帮帮我吗?为什么价值在变化?
9
1
这是输出:
library(shiny)
library(plotly)
library(pingr)
答案 0 :(得分:1)
当p可以(并且在这种情况下 )为零时,您正在阅读和撰写ar[p-1]
。在数组范围之外读取或写入是未定义行为。
答案 1 :(得分:1)
所描述的问题就像是内存损坏的明确迹象,即代码会覆盖它不拥有的一些内存。在这种情况下,它会覆盖N
中main
的值。
问题是当你的排序函数达到p = 1且i = 0时。假设列表看起来像
{9, 1, ....}
这些行
ar[p] = ar[p-1];
ar[p-1] = pivot;
将列表更改为
{1, 9, ....}
然后你做
temp = ar[i];
ar[i] = ar[p];
ar[p] = temp;
p--;
所以列表(错误地)改回
{9, 1, ....}
和p变为0。
因此,您要再写一个循环,然后写入ar[p-1]
,现在为ar[-1]
,即超出范围。
答案 2 :(得分:0)
您的算法不正确。
你正在越过数组ar
粉碎记忆的边界。您永远不会在p+1
和p-1
循环中检查索引while(ar[i]>pivot)
和while(ar[i]<pivot)
的值。如果p+1 >= N
或p-1 < 0
您遇到问题。