返回信息流尝试写个熟悉指针的程序,程序目的就是把长度为n数组a整体循环右移m位,调试过程总是出现access violation,求大神帮忙看看,谢谢
#include<stdio.h>
#include<cstdlib>
int *malloc_a2d(int *a, int n);
void free_a2d(int *a);
int *move_a2d(int *a, int *b ,int m, int n);
void main()
{
int m, n, *a=NULL, *b=NULL;
printf("请输入需要移动的位数m,和数组总长度n \n");
scanf("%d %d", &m, &n);
malloc_a2d(a, n);
for (int i = 0; i < n; i++)
a[i] = i+1;
malloc_a2d(b, n);
move_a2d(a, b, m, n);
Print_New(b, n);
free_a2d(a);
free_a2d(b);
system("pause");
}
int *malloc_a2d(int *a, int n)
{
a = (int *) malloc(n*sizeof(int));
return a;
}
void free_a2d(int *a)
{
free(a);
}
int *move_a2d(int *a, int *b, int m, int n)
{
int *ip, *jp, temp;
ip = a;
jp = a+n-1;
int *bp;
bp = b;
for (ip; ip <= jp; ip++)
{
if (ip+m <= jp)
b[bp+m-b] = a[ip-a];
else
b[bp+m-n-b] = a[ip-a];
bp++;
}
return b;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #82188同步于 2014/9/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
小白求问
helloaugust
2014/9/7镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
最简单(也是最快)的办法是:整体翻转,然后前n-m个元素翻转,然后后m个元素翻转。翻转就是指把这一部分元素的顺序前后完全颠倒,比如1234567变成7654321。
来自「北邮人论坛手机版」
我挺想知道为什么会出这样的错误,奇怪得很
【 在 nuanyangyang 的大作中提到: 】
: 最简单(也是最快)的办法是:整体翻转,然后前n-m个元素翻转,然后后m个元素翻转。翻转就是指把这一部分元素的顺序前后完全颠倒,比如1234567变成7654321。
: 来自「北邮人论坛手机版」
malloc_a2d,这个函数出了问题,你的意图是把a传进去修改值,这种方式返回申请的空间,但是int *a这样写,打不到你要的效果,这样还是形参,拷贝的副本进来。
【 在 nuanyangyang 的大作中提到: 】
: 最简单(也是最快)的办法是:整体翻转,然后前n-m个元素翻转,然后后m个元素翻转。翻转就是指把这一部分元素的顺序前后完全颠倒,比如1234567变成7654321。
: 来自「北邮人论坛手机版」
int *malloc_a2d(int n)
{
a = (int *) malloc(n*sizeof(int));
return a;
}
int main() {
...
a = malloc_a2d(n);
}
soga,多谢你
【 在 gdl 的大作中提到: 】
: malloc_a2d,这个函数出了问题,你的意图是把a传进去修改值,这种方式返回申请的空间,但是int *a这样写,打不到你要的效果,这样还是形参,拷贝的副本进来。
果然是传值出现了问题,谢了
【 在 nuanyangyang 的大作中提到: 】
: [code=c]
: int *malloc_a2d(int n)
: {
: ...................