VS2010 下出现的问题0xC0000005: Access violation writing location
发布网友
发布时间:2022-06-03 15:51
我来回答
共2个回答
热心网友
时间:2023-10-22 18:23
这个问题有两种方法解:
1.
对栈的定义不变
seqstack s1;//=NULL;
seqstack *s=&s1;
在主程序中
init(s);
2.修改初始化函数
void init(seqstack **s) /*初始化建立一个空栈*/
{
(*s)=(seqstack*)malloc(sizeof(seqstack));
(**s).top=-1;
printf("\n\nThere is a empty stack!\n");
}
在主程序中
static seqstack *s;
init(&s);
其原因(定义静态变量会默认初值0,这个你应该知道的)是,
1.你没给指针分配空间
2.的init(seqstack *s),按你原来的调用是值传递,如果你单步跟踪后你会发现 s还是0。
所以可以说你对指针的了解老指针指向常规变量的用法,当若改变一个指针的值就应该用
指向指针的指针**p.
另外成熟的算法对分配的内存 结束时一定要释放的,这是好的习惯,如果你做的项目一直跑个
一年半载不重启,这样内存早晚会被程序吃光的。
好累 给分啊
另外,团IDC网上有许多产品团购,便宜有口碑追问你说的是什么啊 ???什么栈、。、??我没有啊
热心网友
时间:2023-10-22 18:24
内存访问失败,我觉得是 dest="Can I";这句导致了问题,字符串除了初始化时能这样直接等于外,其他情况一般不可以直接等于xx的,这样之后可能导致dest变为静态变量,所以下次你赋值到 *dest1=*src1;也就是到dest的末尾时出错了。修改为如下就行了。
#include"stdio.h"
#include"malloc.h"
#include "string.h"
void catstr(char *dest,char *src);
void main()
{
char *dest,*src="help you ???";
if((dest=(char *)malloc(80))==NULL)
{
printf("no memory \n");
}
strcpy(dest,"Can I");
catstr(dest,src);
puts(dest);
getchar();
}
void catstr(char *dest1,char *src1)
{
while(*dest1)
{
dest1++;
}
while(*src1)
{
*dest1=*src1;
src1++;
dest1++;
}
*dest1 = '\0';
}追问你好 我把赋值语句改为了 strcpy(dest,"can i");
但是运行之后出现了图片中的 乱字符 请问是怎么回事???
谢谢!!