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 时发生访问冲突。

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

1、用VS2013打开程序。

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

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

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

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

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-25
骚年,编程的时候要仔细,a[k++]=c;你的k的初值是多少啊?
你没给k赋初值,计算机怎么知道a[k++]在那里啊?当然会抛出异常了!根据你这个题目的意思,在函数头加个int k=0.就好了。本回答被提问者采纳
第2个回答  2019-03-19
不知道你n有多大,也不知道a数组存的数据多少,如果你的n达到几万甚至有时候是几千的话就是内存分配问题,在如你的定义方式在栈上分配内存通常分配不了这么大,会导致写入位置冲突。需要用malloc或new进行动态内存分配。
第3个回答  2012-12-06
k未初始化,取值超过a数组长度100,越界访问
第4个回答  2012-12-06
#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;
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网