传递给c ++中的函数后,整数变量的值会发生变化

时间:2018-03-31 13:22:02

标签: c++ variables segmentation-fault parameter-passing

我在下面给出的代码中的函数func中传递int变量N的值。但是在执行func之后,N的值会发生变化。 我按价值通过N.有人可以帮帮我吗?为什么价值在变化?

9
1

这是输出:

library(shiny)
library(plotly)
library(pingr) 

3 个答案:

答案 0 :(得分:1)

当p可以(并且在这种情况下 )为零时,您正在阅读和撰写ar[p-1]。在数组范围之外读取或写入是未定义行为。

答案 1 :(得分:1)

所描述的问题就像是内存损坏的明确迹象,即代码会覆盖它不拥有的一些内存。在这种情况下,它会覆盖Nmain的值。

问题是当你的排序函数达到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+1p-1循环中检查索引while(ar[i]>pivot)while(ar[i]<pivot)的值。如果p+1 >= Np-1 < 0您遇到问题。