C分段错误:11 #包括 int main() { char memf[10000]; int memlen、vn、vw、vh、fattime、posit、速度、间隔、nattacks、时间=0、qa=0、ninit=0、埃尔克斯; scanf(“%d\n”和&memlen); scanf(“%d\n”和&vn); 扫描频率(“%d%d%d%d%d%d%d%d%d”、&vw、&vh、&fattime、&Posite、&speed、&interval、&nattacks); 而(nattacks>ninit) { 如果(时间==fattime) { for(elxan=posit;elxanfattime) { 对于(qa=0;qa

C分段错误:11 #包括 int main() { char memf[10000]; int memlen、vn、vw、vh、fattime、posit、速度、间隔、nattacks、时间=0、qa=0、ninit=0、埃尔克斯; scanf(“%d\n”和&memlen); scanf(“%d\n”和&vn); 扫描频率(“%d%d%d%d%d%d%d%d%d”、&vw、&vh、&fattime、&Posite、&speed、&interval、&nattacks); 而(nattacks>ninit) { 如果(时间==fattime) { for(elxan=posit;elxanfattime) { 对于(qa=0;qa,c,segmentation-fault,C,Segmentation Fault,,以下是如何处理此类错误: 首先,添加#包括。然后,无论何时从数组中读取或分配到数组,首先测试您是否在范围内编制索引。例如,此行: #include <stdio.h> int main() { char memf[10000]; int memlen, vn , vw,vh,fattime , posit , speed , interval , nattacks,time=0,qa=0,ninit=0,elxan; scanf("%d\n",&me

,以下是如何处理此类错误:

首先,添加
#包括
。然后,无论何时从数组中读取或分配到数组,首先测试您是否在范围内编制索引。例如,此行:

#include <stdio.h>
int main()
{
    char memf[10000];
    int memlen, vn , vw,vh,fattime , posit , speed , interval , nattacks,time=0,qa=0,ninit=0,elxan;
    scanf("%d\n",&memlen);
    scanf("%d\n",&vn);
    scanf("%d %d %d %d %d %d %d",&vw,&vh,&fattime,&posit,&speed,&interval,&nattacks);

        while(nattacks>ninit)
        {
            if(time==fattime)
            {
                for(elxan=posit;elxan<=posit+vw;elxan=posit++)
                {
                    memf[elxan]=vh;
                }
                posit=posit+speed;
                time++;
                ninit++;

            }
            else if(time>fattime)
             {
                for(qa=0;qa<100000;qa++)
                {
                   if(ninit==nattacks)
                       break;
                   else if(qa%interval==0)
                   {
                       for(elxan=posit;elxan<=posit+vw;elxan=posit++)
                       {
                           memf[elxan]=vh;
                       }
                       posit=posit+speed;
                       time++;
                       ninit++;
                   }


                   else
                       posit=posit+speed;
                  }
             }
             else
             {  time++;
                posit=posit+speed;

             }
        }
    /*for(px=0;px<=memlen;px++)
    {
        if(memf[px]=='0')
            memf[px]=1;
    }*/



    printf("%s",memf);
    return 0;
}
应更改为以下行:

memf[elxan]=vh;

assert(0以下是如何处理此类错误:

首先,添加
#包括
。然后,无论何时从数组中读取或分配到数组,首先测试您是否在范围内编制索引。例如,此行:

#include <stdio.h>
int main()
{
    char memf[10000];
    int memlen, vn , vw,vh,fattime , posit , speed , interval , nattacks,time=0,qa=0,ninit=0,elxan;
    scanf("%d\n",&memlen);
    scanf("%d\n",&vn);
    scanf("%d %d %d %d %d %d %d",&vw,&vh,&fattime,&posit,&speed,&interval,&nattacks);

        while(nattacks>ninit)
        {
            if(time==fattime)
            {
                for(elxan=posit;elxan<=posit+vw;elxan=posit++)
                {
                    memf[elxan]=vh;
                }
                posit=posit+speed;
                time++;
                ninit++;

            }
            else if(time>fattime)
             {
                for(qa=0;qa<100000;qa++)
                {
                   if(ninit==nattacks)
                       break;
                   else if(qa%interval==0)
                   {
                       for(elxan=posit;elxan<=posit+vw;elxan=posit++)
                       {
                           memf[elxan]=vh;
                       }
                       posit=posit+speed;
                       time++;
                       ninit++;
                   }


                   else
                       posit=posit+speed;
                  }
             }
             else
             {  time++;
                posit=posit+speed;

             }
        }
    /*for(px=0;px<=memlen;px++)
    {
        if(memf[px]=='0')
            memf[px]=1;
    }*/



    printf("%s",memf);
    return 0;
}
应更改为以下行:

memf[elxan]=vh;

assert(0我认为即使假设输入的初始值是合理的,这个循环几乎可以保证会跑掉并访问数组
memf
之外的内存

assert(0 <= elxan && elxan < 10000);
memf[elxan]=vh;

for(elxan=posit;elxan我认为,即使假设输入的初始值是合理的,这个循环几乎可以保证会跑掉并访问数组之外的内存

assert(0 <= elxan && elxan < 10000);
memf[elxan]=vh;

for(elxan=posit;elxan您的测试值是什么?您确定为vw输入的值小于10000吗?您能告诉我们您输入的数据吗?查找类似错误的三种有用方法是1)使用调试器单步执行代码2)添加
printf
语句以监视程序正在使用的值,以及3)添加
assert
语句以捕获诸如从数组末尾寻址之类的内容(我强烈怀疑这就是本例中的问题所在)。显示完整的错误消息。您的测试值是什么?您确定为vw输入的值小于10000吗?您可以向我们显示您输入的数据吗?查找此类错误的三种有用方法是1)使用调试器单步执行代码2)添加
printf
语句以监视程序正在使用的值,以及3)添加
assert
语句以捕获诸如从数组末尾寻址之类的内容(我强烈怀疑这是本例中的问题)。显示完整的错误消息。