Abort trap 6 error in C
115,696
Solution 1
Try this:
void drawInitialNim(int num1, int num2, int num3){
int board[3][50] = {0}; // This is a local variable. It is not possible to use it after returning from this function.
int i, j, k;
for(i=0; i<num1; i++)
board[0][i] = 'O';
for(i=0; i<num2; i++)
board[1][i] = 'O';
for(i=0; i<num3; i++)
board[2][i] = 'O';
for (j=0; j<3;j++) {
for (k=0; k<50; k++) {
if(board[j][k] != 0)
printf("%c", board[j][k]);
}
printf("\n");
}
}
Solution 2
You are writing to memory you do not own:
int board[2][50]; //make an array with 3 columns (wrong)
//(actually makes an array with only two 'columns')
...
for (i=0; i<num3+1; i++)
board[2][i] = 'O';
^
Change this line:
int board[2][50]; //array with 2 columns (legal indices [0-1][0-49])
^
To:
int board[3][50]; //array with 3 columns (legal indices [0-2][0-49])
^
When creating an array, the value used to initialize: [3]
indicates array size.
However, when accessing existing array elements, index values are zero based.
For an array created: int board[3][50];
Legal indices are board[0][0]...board[2][49]
EDIT To address bad output comment and initialization comment
add an additional "\n" for formatting output:
Change:
...
for (k=0; k<50;k++) {
printf("%d",board[j][k]);
}
}
...
To:
...
for (k=0; k<50;k++) {
printf("%d",board[j][k]);
}
printf("\n");//at the end of every row, print a new line
}
...
Initialize board variable:
int board[3][50] = {0};//initialize all elements to zero
( array initialization discussion... )
Related videos on Youtube
Author by
user1753491
Updated on July 09, 2022Comments
-
user1753491 almost 2 years
I have this code:
void drawInitialNim(int num1, int num2, int num3) { int board[2][50]; //make an array with 3 columns int i; // i, j, k are loop counters int j; int k; for(i=0;i<num1+1;i++) //fill the array with rocks, or 'O' board[0][i] = 'O'; //for example, if num1 is 5, fill the first row with 5 rocks for (i=0; i<num2+1; i++) board[1][i] = 'O'; for (i=0; i<num3+1; i++) board[2][i] = 'O'; for (j=0; j<2;j++) { //print the array for (k=0; k<50;k++) { printf("%d",board[j][k]); } } return; } int main() { int numRock1,numRock2,numRock3; numRock1 = 0; numRock2 = 0; numRock3 = 0; printf("Welcome to Nim!\n"); printf("Enter the number of rocks in each row: "); scanf("%d %d %d", &numRock1, &numRock2, &numRock3); drawInitialNim(numRock1, numRock2, numRock3); //call the function return 0; }
When I compile this with gcc, it is fine. When I run the file, I get the abort trap 6 error after entering the values.
I have looked at other posts about this error, and they don't help me.
-
BLUEPIXY over 9 years
int board[2][50];
-->int board[3][50];
-
5gon12eder over 9 yearsBut even then, 50 is a magic number that might overflow.
-
-
ryyker over 9 years@user1753491 - also, board is an integer array, when making assignments, shouldn't you be populating them with zeros instead of 'O'? (
board[2][i] = 'O';
should beboard[2][i] = 0;
) -
user1753491 over 9 years@ryyker I want to make them an O for my program. I thought I could do that with ASCII codes somehow. Do you know what I mean? I do not want to deal with char arrays.