当前位置:编程学习 > VC++ >>

VC中的问题

为什么在函数调试的时候没有出现错误,运行的时候就会出现错误,错误是这样的 “0x00401499”指令引用的“0xccccccc”内存,该内存不能为“written”。 要中止程序,请点击“确定” 要调试程序,请点击“取消” 请大神帮忙啊。。。是什么错误。。。 具体的调用的代码如下: int input(char oc[],char *p1) { FILE *r; int m=10000; char ch; int i=0; r=fopen(p1,"r"); if(r==NULL) //判断是否读取成功 { printf("错误!"); } while( ((ch=fgetc(r))!= EOF)) //将文件内容复制出来 { if(i<m) { oc[i]=ch; i++; } else { //printf("文件太大,只能显示前%d个字符\n",m); break; } } fclose(r); return 0; } /*------------------------------------------------------------------------------------*/ void output(char oc[], char* p2, int len) { int i=0; FILE *r2; len=strlen(oc); if((r2=fopen(p2,"w")) == NULL) // 检查文件是否可以写入 { printf("2.dat is error"); } for(i=0;i<len;i++) //当数组内容不为空 { fwrite(&oc[i],sizeof(char),1,r2); //写入数组 } fclose(r2); } //检验输入报文的合法性 int check(char oc[]) { int i=0; int f=1; while(oc[i]!=EOF) { if(((oc[i]>='a'&&oc[i]<='z')||(oc[i]==' '))||(oc[i]==',')) i++; else { f=0; break; } } return f; } //根据原码报文生成字符频度表 struct str1 { char ch; int k; }; struct str2 { int length; struct str1*elem; }; typedef struct str2 sqlist; void creatW(char *oc,sqlist &W) { int i,j,f; for(i=1;i!='\0';i++) { for(j=1,f=1;j<=W.length&&f==1;j++) if(W.elem[j-1].ch==oc[i-1]) { W.elem[j-1].k++; f=0; break; } if(f==1) { W.elem[j-1].ch=oc[i-1]; W.length++; W.elem[j-1].k++; } } } void main(){ sqlist W; HuffmanTree HT; char a[15]="E:\\in.txt"; char d[15]="E:\\out.txt"; char oc[10000]=""; //printf("请输入文件路径\n"); //scanf("%s",a); printf("文件路径为:%s\n",a); input(oc,a); printf("内容为:%s\n",oc); output(oc,d,10000); check(oc); creatW(oc,W);}
答案:找到了,在你的creatW(char *oc,sqlist &W)函数中,W.elem[j-1].ch=oc[i-1];
这里,W是有内存空间的,但是W.elemet[j-1]是个结构体指针,你用W.elem[j-1].ch,就是在给结构体指针指向的内容赋值,但是,你仅仅只有一个结构体指针而已,没有给他分配空间啊,没有空间,你就给他赋值,鬼晓得写到哪儿去了,写到一个不可写的内存空间了,就弹出不能Write了

上一个:MFC中这句话是什么意思啊!~
下一个:VC6 MFC在Dialog中的众多界面是如何组织在一起的?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,