c语言编程显示内存不能为read

#include"stdafx.h"#defineN20intmain(){inti,k,m,j;inta[N];for(i=0;i<N;i++)scanf("%d",&... #include "stdafx.h"
#define N 20
int main()
{
int i,k,m,j;
int a[N];
for(i=0;i<N;i++)scanf("%d",&a[i]);
for(i=0;i<N;i++)
{i++;j++;k=j;
for(j=k;j<N;j++)
{if(a[i]=a[j])
j++;
else
printf("%d",a[i]);m=j;break;
}
if(i!=m)printf("%5d",a[i]);
}
return 0;

}

目的是将输入的数中重复的数去掉,怎么解
展开
 我来答
风若远去何人留
推荐于2018-03-02 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部
该提示出现在运行阶段,表示程序运行时访问了不可以访问的内存,即访问越界。
由于提示是不能read,所以是出现在读访问。一般有如下几种情况:
1 对数组访问越界。
常见于数组的循环访问,或以变量为下标导致超出数组定义范围。
对于C语言数组,定义或分配了n个元素的空间时,下标或指针移动只允许在0~n-1范围内进行,超出这个范围即为越界,会导致不可预知后果,其中一种即为内存不能read。
2 对字符串访问或输出时,字符串中没有赋值结束符\0.
C语言的字符串操作,均以\0作为结束标志。
如果字符串中没有指定结束符,那么函数会一直访问下去,导致超过字符串定义的空间范围,从而出现内存不能为read提示。
3 指针强制转换。
当目标指针类型所占用空间,超过了原本指针指向地址分配的内容时,按照新指针访问,会导致越界。
比如定义一个10字节的结构体变量,然后把地址强制赋值给一个100字节的结构体指针类型,那么通过后者去访问后90字节范围时,就属于越界操作,有可能出现内存不能read错误。
阿冬76
2014-10-30 · TA获得超过5028个赞
知道大有可为答主
回答量:2710
采纳率:88%
帮助的人:1099万
展开全部
你在第一次执行j++之前没有给j赋过初值啊。
追问
有输出了,可还是不对
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爽朗的小洛
推荐于2017-12-15
知道答主
回答量:11
采纳率:0%
帮助的人:5.6万
展开全部
#include <stdio.h>
#define N 5
int main()
{
int i;
int k = 0;
int s = N;
int a[N];
for(i=0;i<N;i++)
scanf("%d",&a[i]);
// for(i=0;i<N;i++)
// {
// for(j=k;j<N;j++)
// {
// if(a[i]=a[j])
// j++;
// else
// printf("%d",a[i]);m=j;break;
// }
// if(i!=m)printf("%5d",a[i]);
// }

for(i = 0; i < N; i++)
{
for(int j = i+1; j < N; j++)
{

k = j;
if(a[i] == a[j])
{
while(k < N -1)
{
a[k] = a[k+1];
a[k+1] = 0;
k++;
}
s--;
}
}
}

for(i = 0; i < s; i++)
{
printf("%d,",a[i]);
}
return 0;

}

可能还有些细节问题。吃饭去了 如果你发现什么问题,说下额。。。。代码还有问题。。。我回来修改下
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-10-30
展开全部
#define N 5
int main(array<System::String ^> ^args)
{
int i,j;
int value[N];
int flag[N] = {0};
int value1[N];

for(i=0; i< N; i++) {
scanf("%d",&value[i] );

}
for( i = 0; i < N; i++) {
for(j=0;j<N;j++) {
if( ( value[j] == value[i] ) && ( i != j ) && flag[j]!=2 ) {
flag[i] = 1;
flag[j] = 2;
}
}
}

j = 0;
for( i = 0; i < N; i++ ) {
if ( flag[i] == 2 ) {
continue;
}
value1[j] = value[i];
j++;
}

for(i=0;i<j;i++) {
printf("%d: %d\n", i, value1[i]);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
谢应宸
2014-10-30 · TA获得超过2640个赞
知道大有可为答主
回答量:2731
采纳率:66%
帮助的人:2143万
展开全部
我这边执行好像没出问题(结果肯定不对)

你用单步跟踪的方式看下在哪一行挂掉的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式