【发布时间】:2018-03-31 13:22:01
【问题描述】:
我在下面给出的代码中的函数 func 中传递 int 变量 N 的值。但是在执行 func 之后,N 的值会发生变化。 我按值传递 N。有人可以帮帮我吗?为什么值会发生变化?
void sort_by_pivot(int ar[], int N, int p)
{
int pivot = ar[p],temp;
for(int i=0; i<p; i++)
{
while(ar[i]>pivot)
{
if(ar[i] > pivot)
{
ar[p] = ar[p-1];
ar[p-1] = pivot;
temp = ar[i];
ar[i] = ar[p];
ar[p] = temp;
p--;
}
}
}
for(int i=p+1; i<N; i++)
{
while(ar[i]<pivot)
{
if(ar[i] < pivot && p<N)
{
ar[p] = ar[p+1];
ar[p+1] = pivot;
temp = ar[i];
ar[i] = ar[p];
ar[p] = temp;
p++;
}
}
}
}
int main()
{
int ar[] = {5,9,2,6,1,4,3,7,8};
int N = 9;
int p = 4;
printf("%d\n",N);
sort_by_pivot(ar, N, p);
printf("%d\n",N);
}
这是输出:
9
1
【问题讨论】:
-
移动
int N和int p到你的数组声明之前;我敢打赌你会得到不同的结果(使用你的编译器)。 -
当我运行你的代码时,我得到 9 然后是一个段错误。
-
顺便说一句:为什么不添加 const 说明符?
-
您没有边界检查,并且在第二个循环中,
p变量将增加到超出实际数组的长度,从而导致内存损坏和未定义的行为。你的算法坏了。结束。 -
这不是 SO 的问题。直到您阅读并应用了How to debug small programs 中的材料。您需要首先在这方面发挥自己的作用。只有这样,如果您不明白是什么导致了您发现的问题,您可以在这里提问,minimal reproducible example。
标签: c++ variables segmentation-fault parameter-passing