c语言 写入位置时发生访问冲突是怎么回事儿?

#include<stdio.h>#include<string.h>intmain(){inti,k,j,m;chars[100];chara[100]={'0'};c... #include<stdio.h>
#include<string.h>
int main()
{
int i,k,j,m;
char s[100];
char a[100]={'0'};
char c;
scanf("%s",&s);
m=strlen(s);
for(i=0;i<=m-3;i++){
if(s[i+1]=='-'&&s[i]<s[i+2]){
for(c=s[i];c<=s[i+2];c++)
a[k++]=c; 调试到这里就提示错误
}
else
{
for(j=i;j<=i+2;j++)
a[k++]=s[j];
}
}
a[k]='\0';
printf("%s",a);
return 0;
}
错误提示是:0x000B14DC 处有未经处理的异常(在 review.exe 中): 0xC0000005: 写入位置 0xCD0FC744 时发生访问冲突。
展开
 我来答
百度网友faadf46
高粉答主

2020-05-09 · 说的都是干货,快来关注
知道答主
回答量:4556
采纳率:0%
帮助的人:71.5万
展开全部

c语言 写入位置时发生访问冲突是设置错误造成的,解决方法为:

1、用VS2013打开程序。

2、按住CTRL+F5运行代码时会出现如下错误,其实代码本身并没有错误。

3、在上图中点击调试按钮进行调试可以发现如下的错误,即内存写入错误。

4、此时需要更改系统的栈保留空间大小,点击“项目”-“项目属性”。

5、在项目属性页面找到“系统”,并更改堆栈保留大小,建义填写一个较大的数字,如1000000。

6、此后再次编译运行代码,即不会出现内存写入错误了。

luike521
推荐于2017-11-25 · TA获得超过148个赞
知道答主
回答量:76
采纳率:0%
帮助的人:64.4万
展开全部
骚年,编程的时候要仔细,a[k++]=c;你的k的初值是多少啊?
你没给k赋初值,计算机怎么知道a[k++]在那里啊?当然会抛出异常了!根据你这个题目的意思,在函数头加个int k=0.就好了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
班翠海思宸
2019-03-19 · TA获得超过3841个赞
知道大有可为答主
回答量:3059
采纳率:34%
帮助的人:155万
展开全部
不知道你n有多大,也不知道a数组存的数据多少,如果你的n达到几万甚至有时候是几千的话就是内存分配问题,在如你的定义方式在栈上分配内存通常分配不了这么大,会导致写入位置冲突。需要用malloc或new进行动态内存分配。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hustcslhb
2012-12-06 · TA获得超过802个赞
知道小有建树答主
回答量:492
采纳率:0%
帮助的人:405万
展开全部
k未初始化,取值超过a数组长度100,越界访问
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夏碧梦
2012-12-06 · TA获得超过281个赞
知道小有建树答主
回答量:260
采纳率:0%
帮助的人:247万
展开全部
#include<stdio.h>
#include<string.h>
int main()
{
int i,k=0,j,m;
char s[100];
char a[100]= {'0'};
char c;
scanf("%s",s);
m=strlen(s);
printf("%d\n",m);
for(i=0; i<=m-3; i++)
{
if(s[i+1]=='-'&&s[i]<s[i+2])
{
for(c=s[i]; c<=s[i+2]; c++)
a[k++]=c;
}
else
{
for(j=i; j<=i+2; j++)
a[k++]=s[j];
}
}
a[k]='\0';
printf("%s",a);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式