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中的众多界面是如何组织在一起的?