wojianguile 2019-12-20 17:21 采纳率: 75%
浏览 204
已采纳

为什么这段程序在输入文本较大(小于10M)时会显示无效内存引用呢?

背景:
一种压缩文本文件(假设文件中不包含数字)的方法如下:

1. 原始文本文件中的非字母的字符,直接拷贝到压缩文件中;

2. 原始文件中的词(全部由字母组成),如果是第一次出现,则将该词加入到一个词的列表中,并拷贝到压缩文件中;否则该词不拷贝到压缩文件中,而是将该词在词的列表中的位置拷贝到压缩文件中。
3. 词的列表的起始位置为 1 。 词的定义为文本中由大小写字母组成的最大序列。大写字母和小写字母认为是不同的字母

输入:

输入为一段文本,可以假设输入中不会出现数字、每行的长度不会超过 80 个字符,并且输入文本的大小不会超过 10M。

输出:

压缩后的文本

测试用例 1 以文本方式显示
1.Please, please do it--it would please Mary very,↵
2.very much.↵
3.↵
4.Thanks↵
以文本方式显示
1.Please, please do it--4 would 2 Mary very,↵
2.7 much.↵
3.↵
4.Thanks↵

#include<stdio.h>
#include<string.h>
int main()
{
char s[10000][81]={0};
int k=0,l=1,r=1;       
for(;;r++)
{k=1;
    char a[90]={0};
    char b[90][100]={0},c[100]={0};         
    int i=1;
        scanf("%c",&a[0]);
    if(a[0]==0)
    break;
            do 
            scanf("%c",&a[i]);
            while(a[i++]!='\n'); //输入       
int j=0;
int n=0;
    if(a[0]!=0)       
    {
        for(j=0;a[j]!=0;j++)         
            {
            if((a[j]>='a'&&a[j]<='z')||(a[j]>='A'&&a[j]<='Z'))
            {b[k][n]=a[j];
            n++;} //将词存入b[]中;        
            else {
            c[k]=a[j];//将其他字符存入c[]中 
            b[k][n]=0;
            k++;//换行
            n=0;}}} //将n清零以便下一次纪录        
char d[90]={0};
    for(n=1;n<k;n++)
    {j=1;
        for(;j<l;j++) 
        if(strcmp(s[j],b[n])==0)//比较s与b 
        {sprintf(d,"%d",j);      
    strcpy(b[n],d);//把bn变为相应的次数 
    break;}         
if(j==l&&b[n][0]!=0)//将b中单词存入s以便进行上一个循环 
{
strcpy(s[l],b[n]);
l++;}       
printf("%s",b[n]);
printf("%c",c[n]);
}
}
return 0;
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2019-12-21 12:42
    关注

    堆栈的大小是有限制的(一般是2MB),所以数组如果很大,不要作为局部变量放在函数里,应该用malloc申请

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL