C中的中止陷阱6错误
Posted
技术标签:
【中文标题】C中的中止陷阱6错误【英文标题】:Abort trap 6 error in C 【发布时间】:2014-10-17 18:22:11 【问题描述】:我有这个代码:
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;
当我用 gcc 编译它时,它很好。运行文件时,输入值后出现 abort trap 6 错误。
我查看了有关此错误的其他帖子,但它们对我没有帮助。
【问题讨论】:
int board[2][50];
--> int board[3][50];
但即便如此,50 也是一个可能会溢出的神奇数字。
【参考方案1】:
你正在写入不属于你的内存:
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';
^
改变这一行:
int board[2][50]; //array with 2 columns (legal indices [0-1][0-49])
^
收件人:
int board[3][50]; //array with 3 columns (legal indices [0-2][0-49])
^
创建数组时,用于初始化的值:[3]
表示数组大小。
但是,在访问现有数组元素时,索引值从零开始。
对于创建的数组:int board[3][50];
合法索引是 board[0][0]...board[2][49]
编辑解决错误的输出注释和初始化注释
为格式化输出添加额外的“\n”:
变化:
...
for (k=0; k<50;k++)
printf("%d",board[j][k]);
...
收件人:
...
for (k=0; k<50;k++)
printf("%d",board[j][k]);
printf("\n");//at the end of every row, print a new line
...
初始化板变量:
int board[3][50] = 0;//initialize all elements to zero
(array initialization discussion...)
【讨论】:
@user1753491 - 另外,board 是一个整数数组,在进行分配时,您不应该用零而不是“O”填充它们吗? (board[2][i] = 'O';
应该是board[2][i] = 0;
)
@ryyker 我想让它们成为我的程序的 O。我想我可以以某种方式使用 ASCII 码来做到这一点。你懂我的意思吗?我不想处理 char 数组。【参考方案2】:
试试这个:
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");
【讨论】:
以上是关于C中的中止陷阱6错误的主要内容,如果未能解决你的问题,请参考以下文章
C Hangman 程序调试辅助(中止陷阱:6 错误)[关闭]
从 OS X 中的 main 返回但不在 linux 上时中止陷阱 6