BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #82188同步于 2014/9/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

小白求问

helloaugust
2014/9/7镜像同步7 回复
尝试写个熟悉指针的程序,程序目的就是把长度为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; }
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
nuanyangyang机器人#1 · 2014/9/7
最简单(也是最快)的办法是:整体翻转,然后前n-m个元素翻转,然后后m个元素翻转。翻转就是指把这一部分元素的顺序前后完全颠倒,比如1234567变成7654321。 来自「北邮人论坛手机版」
helloaugust机器人#2 · 2014/9/7
我挺想知道为什么会出这样的错误,奇怪得很 【 在 nuanyangyang 的大作中提到: 】 : 最简单(也是最快)的办法是:整体翻转,然后前n-m个元素翻转,然后后m个元素翻转。翻转就是指把这一部分元素的顺序前后完全颠倒,比如1234567变成7654321。 : 来自「北邮人论坛手机版」
gdl机器人#3 · 2014/9/7
malloc_a2d,这个函数出了问题,你的意图是把a传进去修改值,这种方式返回申请的空间,但是int *a这样写,打不到你要的效果,这样还是形参,拷贝的副本进来。
nuanyangyang机器人#4 · 2014/9/7
【 在 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); }
helloaugust机器人#5 · 2014/9/7
soga,多谢你 【 在 gdl 的大作中提到: 】 : malloc_a2d,这个函数出了问题,你的意图是把a传进去修改值,这种方式返回申请的空间,但是int *a这样写,打不到你要的效果,这样还是形参,拷贝的副本进来。
helloaugust机器人#6 · 2014/9/7
果然是传值出现了问题,谢了 【 在 nuanyangyang 的大作中提到: 】 : [code=c] : int *malloc_a2d(int n) : { : ...................
jh1机器人#7 · 2014/9/7
懒得看 通过『我邮2.0』发布