2 qq 28901839 qq_28901839 于 2015.06.10 00:41 提问

C语言中读取位置时发生访问冲突该怎么办

#define n 2
int remember[n];
for(i=0;i<n;i++)
remember[i]=i;
remember[n]=\0
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
if(h[remember[i]].score<h[j].score)
k=remember[i];
remember[i]=remember[j];
remember[j]=k;

        }              // 用冒泡排序方法,用辅助数组记住头结点下标
        for(i=0;i<n;i++)
        {
             printf("\n\n*****学校编号:%d\n",h[remember[i]].schoolnum);                                           
           printf("*****学校总分:%d\n" ,h[remember[i]].score);
             printf("*****男团总分:%d\n",h[remember[i]].mscore);
             printf("*****女团总分: %d\n\n\n",h[remember[i]].wscore);

6个回答

gamefinity
gamefinity   Rxr 2015.06.10 05:42
 int remember[n];

下标范围是0..n-1,没有n,你下面有

 remember[n]=\0

显然下标越界了,另,这句里\0是否因为显示问题而缺少引号?否则这样好像语法有问题。

gamefinity
gamefinity 回复qq_28901839: if(h[remember[i]].score<h[j].score)后面有没有大括号?我没有试,但是按道理应该有个,括住三角交换。另外你的代码贴的不规范,所以试起来比较麻烦。
2 年多之前 回复
qq_28901839
qq_28901839 去掉remember[n]=\0这句,还是显示访问冲突,怎么办
2 年多之前 回复
91program
91program   Ds   Rxr 2015.06.10 07:29

按数组操作,没有必要赋值 remember[n]=\0
一般只有将数组当成字符串操作时,才会考虑在最后一个下标赋零,防止字符串没有结束符。但前提是不能越界!

如果一定要赋零零值,可以考虑定义时增加一个元素,如:int remember[n + 1];

qq_28901839
qq_28901839 回复91program: 去掉remember[n]=\0这一句后的代码啊。#define n 2 int remember[n]; for(i=0;i<n;i++) remember[i]=i; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) if(h[remember[i]].score<h[j].score) k=remember[i]; remember[i]=remember[j]; remember[j]=k; } for(i=0;i<n;i++) { printf("*****学校总分:%d\n" ,h[remember[i]].score); printf("*****男团总分:%d\n",h[remember[i]].mscore); printf("*****女团总分: %d\n\n\n",h[remember[i]].wscore);
2 年多之前 回复
91program
91program 回复qq_28901839: 那你能不能帖出来一段没有弄错的代码呢?
2 年多之前 回复
qq_28901839
qq_28901839 刚才那段程序弄错了,没注意,没有remember[n]=\0这一句,为什么运行时还是显示访问冲突啊?
2 年多之前 回复
sxjiangdongqin
sxjiangdongqin   2015.06.10 08:08

骚年,编程的时候要仔细,a[k++]=c;你的k的初值是多少啊?
你没给k赋初值,计算机怎么知道a[k++]在那里啊?当然会抛出异常了!根据你这个题目的意思,在函数头加个int k=0.就好了。

qq_28901839
qq_28901839 你回答错地方了。。。不过您要有空,也帮我看看呗,为什么去掉remember[n]=\0这句,还是显示访问冲突
2 年多之前 回复
qq_28901839
qq_28901839 你回答错地方了。。。不过您要有空,也帮我看看呗,为什么去掉remember[n]=\0这句,还是显示访问冲突
2 年多之前 回复
VisualEleven
VisualEleven   Ds   Rxr 2015.06.10 13:58

你Debug下调试一下,看看,确保你的h[remember[i]]数组下标没有越界。

qq_28901839
qq_28901839 怎么看,好像是这个不对
2 年多之前 回复
frank_20080215
frank_20080215   2015.06.10 14:17

int remember[n];这是声明,没有初始化。仍然是数组越界

frank_20080215
frank_20080215   2015.06.10 12:44

remember[n]=\0,数组越界,破坏了程序

qq_28901839
qq_28901839 去掉这一句,为什么还是显示访问冲突
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片