求c++大神,程序为啥运行了会自动停止!程序如下!题目如图。

#include<iostream>usingnamespacestd;voidmain(){intN;cout<<"pleaseinputN:"<<endl<<"N="... #include<iostream>
using namespace std;
void main()
{
int N;
cout<<"please input N:"<<endl<<"N=";
cin>>N;
cout<<endl<<"please input a[N]:"<<endl;
int *p;
int i,k,m,j,t,*a;
p=a;
p=(int *)malloc(N*sizeof(int));
for(i=0; i<N; i++)
{
cout<<"a["<<i<<"]=";
cin>>p[i];
}
cout<<endl<<"please input k,m:"<<endl<<"k=";
cin>>k;
cout<<"m=";
cin>>m;
for(i=k;i<k+m;i++)
{
for(j=k+i;j<k+m;j++)
{
if(p[i]<p[j])
{
t=p[i];
p[i]=a[j];
p[j]=t;
}
}
}
cout<<endl;
for(i=0;i<N;i++)
{
cout<<p[i]<<' ';
}
free(p);
cout<<endl;

}
展开
 我来答
苍紫幽蓝
2014-05-26 · TA获得超过440个赞
知道小有建树答主
回答量:207
采纳率:80%
帮助的人:159万
展开全部
是因为你的初始化的问题。
a根本没有进行初始化,所以在你进行数组交换的导致地址不可访问,退出。
int *p;
int i,k,m,j,t,*a;
p=a;
p=(int *)malloc(N*sizeof(int));
这几句初始化代码,声明*p和*a,然后p=a,但是之后你是对p进行初始化,将p指向一个新的已经初始化的地址,a还是没有变化,所以在后边你访问a[j]的时候会报错。
只需要将交换代码中的a[j]换成p[j]即可(上述a的声明可以省去),如下。

t=p[i];
p[i]=p[j];
p[j]=t;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-05-26
展开全部
你试试这个代码看行不
#include<iostream>
using namespace std;
void main()
{
int N;
cout<<"please input N:"<<endl<<"N=";
cin>>N;
cout<<endl<<"please input a[N]:"<<endl;
int *p;
int i,k,m,j,t,*a;
p=a;
p=(int *)malloc(N*sizeof(int));
for(i=0; i<N; i++)
{
cout<<"a["<<i<<"]=";
cin>>p[i];
}
cout<<endl<<"please input k,m:"<<endl<<"k=";
cin>>k;
cout<<"m=";
cin>>m;
for(i=k;i<k+m;i++)
{
for(j=1+i;j<k+m;j++)
{
if(p[i]<p[j])
{
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
}
cout<<endl;
for(i=0;i<N;i++)
{
cout<<p[i]<<' ';
}
free(p);
cout<<endl;

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lhy137910144
2014-05-25 · TA获得超过115个赞
知道答主
回答量:48
采纳率:0%
帮助的人:26.3万
展开全部
这个排序也需要你自己排序吗?你这个代码没看懂思路
追问
对啊题目就是那个样子。。您随便改吧,成功就好
追答
#include

using namespace std;

int swap(int *a, int *b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}

int slow_sort(int *array, int N)
{
int i,j;
for (i=0; i array[j])
{
swap(&array[i], &array[j]);
}
}
}
}

int main()
{

int N;

cout>N;

int i,k,m,j,t,*p;

p=(int *)malloc(N*sizeof(int));
cout>p[i];
}

cout>k;
cout>m;

slow_sort(p,N);

for(m=k+m-1;k<m;)
{
swap(&p[k++], &p[m--]);
}

cout<<endl;

for(i=0;i<N;i++)
{
cout<<p[i]<<' ';
}

free(p);

cout<<endl;
system("pause");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式