目前我正在开发一个带有2D数组的程序,用于创建0到10000之间的随机数。事情进展顺利,直到我设置变量。我的代码运行良好,直到我为变量设置字符类型。然后gcc编译器疯了。我尝试过不同的字符类型,但仍然会出现奇怪的错误。感谢您查看我的代码到目前为止。
32: 12. Terminate program.
33:
34: CALL: ./a.out AFTER COMPILING WITH gcc (WITHOUT USING THE -o SWITCH)
40: */
41:
42:
47: #include <stdio.h>
48: #include <stdlib.h>
49: #include <time.h>
50:
51:/*****************************************************************************/
int main ( void )
{
72: int random_nmb [4][6];
73: int number, r, c;
74:
75: srandom((unsigned)time(NULL));
for (c=0; c<=3; c++)
{
for (r=0; r<=5; r++)
{
number = random( )%10001;
random_nmb [r][c] = number;
}
}
}
好的,这是错误代码。
In file included from /usr/include/sys/_types.h:33,
from /usr/include/stdio.h:41,
from ghp9.c:47:
/usr/include/machine/_types.h:51: error: expected '=', ',', ';', 'asm' or
'__attribute__' before 'typedef'
/usr/include/machine/_types.h:74: error: expected '=', ',', ';', 'asm' or
'__attribute__' before '__int_least8_t'
答案 0 :(得分:2)
int random_nmb[4][6];
上述语句将random_nmb
定义为4
个对象的数组,每个对象类型为int[6]
,即一个包含6个整数的数组。因此,第一个索引必须在[0, 3]
范围内,并且范围[0, 5]
中的第二个索引。任何一个索引的任何其他值都将尝试访问超出范围的内存并调用未定义的行为。
你只需要改变(在内部for
循环中)
random_nmb[r][c] = number;
到
random_nmb[c][r] = number;
// ^ ^ indices swapped
请注意,数组索引已被交换,因此它们不会超出范围。
答案 1 :(得分:0)
@fritzone现在我明白为什么你想要我的整个代码。这是所有的字母&#39; B&#39;。感谢大家的帮助。以下是我的错误。让我们把问题放在睡眠剥夺和缺乏经验上。
B
/*
PROGRAM DESCRIPTIVE HEADER FOR GHP #9
SOURCE CODE FILE NAME: ghp9.c
PROGRAMMER NAME: XXXX
SHORT DESCRIPTION: This program will use an array to help pick 15 random
integers from numbers 0 to 10000.
ALGORITHM: