程序崩溃 - 分段错误

Jam*_*oon -1 c segmentation-fault

我的守则

int i,v,o,p,j;
v=0;
o=0;
char x[12]={'#','v','v','o','#','o','v','#','v','o','o','#'};
void vukovi (char a[])
{
    for (i=0;i<12;i++){
        if (x[i]=='#'){
            for (j=i+1;x[j]!='#';j++){
                if (x[j]=='v'){
                    v=v+1;
                }
                if (x[j]=='o')
                    o=o+1;
            }

            if (v>=o){
                for (j=i+1;x[j]!='#';j++){
                    if (x[j]=='o'){
                        x[j]='.';
                    }
                }
            }

        }
        v=0;
        o=0;
    }

for (i=0;i<12;i++){
    printf("%c",x[i]);
    }
}
vukovi(x);
return 0;}
Run Code Online (Sandbox Code Playgroud)

有时它打印得很好.
有时错误

.exe停止工作

我不知道为什么.
程序的想法是:两个地方之间的任何#地方都是v> o,o必须被替换为.
Like我说当它打印时,它打印得很好.
否则错误.救命 ?
(我遗漏了包含和主要功能).

Jea*_*bre 5

i==11这个循环错误时:

for (j=i+1;x[j]!='#';j++){
Run Code Online (Sandbox Code Playgroud)

因为它j从12开始.你已经在字符串之外了,但是因为你的循环停止在树林里向前推进#:未定义的行为.

如果您#在通过未分配的内存(可能发生或不发生)时遇到char,或者遇到超出系统检测到非法读取的页面边界而停止使用SEGV时停止.