读书人

神啊 指针的有关问题真是个大有关问题

发布时间: 2012-03-09 21:42:52 作者: rapoo

神啊 指针的问题真是个大问题阿 救救我吧
快速排序
调试通过,编译通过,指针那里有段错误。请大家帮我看一下怎样修改阿

#include <iostream>

using namespace std;

int main()
{
int num , i = 0 , j;
int *p;
cin >> num;
j = num - 1;
p = new int [num];
for(i; i < num; i++)
{
cin >> p[i];
}
void QuickSort(int p[] , int start , int end);
QuickSort(p , i , j);
return 0;
}
void QuickSort(int p[] , int start , int end)
{
int columella , i , j;
columella = p[0];
i = start;
j = end;
do
{
if(p[j] > columella) //存在严重问题
{
j--;
}
else if(p[j] <= columella)
{
int temp;
temp = columella;
columella = p[j];
p[j] = temp;
i++;
}
if(p[i] < columella)
{
i++;
}
else if(p[i] >= columella)
{
int temp;
temp = columella;
columella = p[i];
p[i] = temp;
j--;
}
}while(i >= j);
QuickSort(p , i , i-1);
QuickSort(p, i + 1 , j);
for(i = 0; i <= end ; i++)
{
cout << p[i] << " ";
}
cout << endl;
delete p;
}

[解决办法]
delete p;

delete [] p;

[解决办法]
你的那个这条语句中使用了new分配了一个数组如下:
p = new int [num];

程序结束后,必须用 如下语句来释放内存空间:

delete[] p;

否则释放的是 p 数组中的第一个数据元素,而后面的 num-1个元素都没有释放!
delete[] p; 才能释放一个数组中的所有元素!



[解决办法]
你的那个 quicksort 中的i 和j的下标没有作 越界检查! 程序运行的时候i和j都出现了越界!
变成了负数,程序肯定要崩溃嘛!
还有程序得讲究格式!不要不讲格式,本来想跟你该的,我没时间,不好意思..
[解决办法]
int main()
{
int num , i = 0 , j;
int *p;
cin >> num;
j = num - 1;
p = new int [num];
for(i; i < num; i++)
{
cin >> p[i];
}
void QuickSort(int p[] , int start , int end);
QuickSort(p , i , j);
return 0;
}

先看看调用QuickSort()的时候,i的值是多少。
[解决办法]

读书人网 >C++

热点推荐