[英]Why i m getting Segmentation Fault in this case?
我正在准備謝爾賓斯基三角形,一切正常,但它顯示了分段錯誤,我不知道我應該在我的代碼中更改什么。 這是我的代碼:
#include <stdio.h>
#include <stdlib.h>
#define t 32
#define x 65
void display(char s[t][x])
{
int i,j;
for (i = 0; i < t; i++){//algorithm
for (j = 0; j <= x ; j++){
if ((s[i][j] == '0' && s[i][j+1] == '0' && s[i][j + 2] == '1') || (s[i][j] == '1' && s[i][j + 1] == '0' && s[i][j + 2] == '0'))
s[i+1][j+1] = '1';
else
s[i+1][j+1] = '0';
}
}
for (i = 0; i < t; i++){//printinng
for (j = 0; j < x; j++){
if (s[i][j] == '1') printf("X");
else printf(" ");
}
printf("\n");
}
}
int main() {
char sierpinski[t][x];
int i;
int y = (x/2);//srodek
for(i=0;i<x;i++){//first row
if(i == y) sierpinski[0][i] = '1';
else sierpinski[0][i] = '0';
}
display(sierpinski);
return 0;
}
剛剛嘗試了 clang 在您的代碼上使用地址清理程序
$ clang++-9 -fsanitize=address c.cc -o test && ./test
=================================================================
==14763==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffd7c8ff160 at pc 0x0000004c53ea bp 0x7ffd7c8fe860 sp 0x7ffd7c8fe858
WRITE of size 1 at 0x7ffd7c8ff160 thread T0
這意味着您在陣列邊界之外觸摸 memory。 確實符合
if ((s[i][j] == '0' && s[i][j+1] == '0' && s[i][j + 2] == '1') || (s[i][j] == '1' && s[i][j + 1] == '0' && s[i][j + 2] == '0'))
索引j + 2
可以大於x - 1
。
您需要在if
檢查中檢查界限
`
#include <stdio.h>
#include <stdlib.h>
#define t 32
#define x 65
void display(char s[t][x])
{
int i,j;
for (i = 0; i < t; i++){//algorithm
for (j = 0; j < x ; j++){
if(j+1 < x && i+1 < t) { // Add this
if ((s[i][j] == '0' && s[i][j+1] == '0' && s[i][j + 2] == '1') || (s[i][j] == '1' && s[i][j + 1] == '0' && s[i][j + 2] == '0'))
s[i+1][j+1] = '1';
else
s[i+1][j+1] = '0';
}
}
}
for (i = 0; i < t; i++){//printinng
for (j = 0; j < x; j++){
if (s[i][j] == '1') printf("X");
else printf(" ");
}
printf("\n");
}
}
int main() {
char sierpinski[t][x];
int i;
int y = (x/2);//srodek
for(i=0;i<x;i++){//first row
if(i == y) sierpinski[0][i] = '1';
else sierpinski[0][i] = '0';
}
display(sierpinski);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.