Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序在使用函数为矩阵赋值时崩溃_C_Arrays_Function_Matrix_Multidimensional Array - Fatal编程技术网

C程序在使用函数为矩阵赋值时崩溃

C程序在使用函数为矩阵赋值时崩溃,c,arrays,function,matrix,multidimensional-array,C,Arrays,Function,Matrix,Multidimensional Array,我试图用用户选择的两个维度的大小制作一个2D矩阵(即dims[]值通过scanf分配),然后对其进行初始化 我的程序可以编译,但当我试图使用函数为字符矩阵赋值时崩溃。 我想这与列的数量(第二个括号)以及我使用数组来定义矩阵的二维大小有关。该问题仅在指定值时发生(而不是在打印时) 函数如下所示(MAX#u SIZE定义为25): 我该怎么做才能解决这个问题?您的电路板大小为3*4。 您的函数以启动后25个条目的倍数(对于内循环中的j>0)访问该小板,即条目编号3*4后13个条目,即索引11处最后一

我试图用用户选择的两个维度的大小制作一个2D矩阵(即dims[]值通过scanf分配),然后对其进行初始化

我的程序可以编译,但当我试图使用函数为字符矩阵赋值时崩溃。
我想这与列的数量(第二个括号)以及我使用数组来定义矩阵的二维大小有关。该问题仅在指定值时发生(而不是在打印时)

函数如下所示(MAX#u SIZE定义为25):


我该怎么做才能解决这个问题?

您的电路板大小为3*4。

您的函数以启动后25个条目的倍数(对于内循环中的j>0)访问该小板,即条目编号3*4后13个条目,即索引11处最后一个有效条目后14个条目。

您的板的大小为3*4。
您的函数在start后面的25个条目的倍数(对于内部循环中的j>0)处访问该小电路板,即在条目编号3*4后面有13个条目,即在索引11的最后一个有效条目后面有14个条目。

以下是如何将变长数组(VLA)正确传递给函数的方法

void initialize_board(int m, int n, char board[m][n]) { ... }

int main ()
{
   int m, n;
   ... // initialize m and n here
   char board[m][n];
   initialize_board(m, n, board);
}
当声明为自动变量时,VLA可能是危险的,因为它们很容易在大小过大(几KB或MB,取决于您的操作系统和硬件)时使程序崩溃

下面介绍如何将可变长度数组(VLA)正确传递给函数

void initialize_board(int m, int n, char board[m][n]) { ... }

int main ()
{
   int m, n;
   ... // initialize m and n here
   char board[m][n];
   initialize_board(m, n, board);
}


当声明为自动变量时,VLA可能是危险的,因为它们很容易在大小过大(几KB或MB,取决于您的操作系统和硬件)时使程序崩溃

车祸发生在哪里?是否在线
板[i][j]='-'?是的,它发生在线路板[i][j]='-'编译器是GNU GCC。。?这就是它在代码块中所说的,不确定是否应该说一些更具体的话。您选择在第一个问题(为什么会崩溃?)的基础上添加第二个问题(我应该如何设计代码?),从而使这个问题成为一个移动的目标。另一种选择是提出一个新的单独问题。祝你好运。使用所有警告和调试信息编译:
gcc-Wall-Wextra-g
with。改进您的代码以避免收到警告。使用调试器
gdb
。另请参见本上下文中的
[MAX\u SIZE]
并不是指“任意大小”或“任意大小到MAX\u大小”或诸如此类的内容。它的意思是“正好是最大尺寸”。4不完全是最大尺寸。碰撞发生在哪里?是否在线
板[i][j]='-'?是的,它发生在线路板[i][j]='-'编译器是GNU GCC。。?这就是它在代码块中所说的,不确定是否应该说一些更具体的话。您选择在第一个问题(为什么会崩溃?)的基础上添加第二个问题(我应该如何设计代码?),从而使这个问题成为一个移动的目标。另一种选择是提出一个新的单独问题。祝你好运。使用所有警告和调试信息编译:
gcc-Wall-Wextra-g
with。改进您的代码以避免收到警告。使用调试器
gdb
。另请参见本上下文中的
[MAX\u SIZE]
并不是指“任意大小”或“任意大小到MAX\u大小”或诸如此类的内容。它的意思是“正好是最大尺寸”。4号不是最大尺寸。哦,我明白了,不过我不知道为什么。。。无论如何,我应该如何以不同的方式编写代码来解决这个问题呢?对于这个新问题的答案(请让它成为一个问题,而不是在这个问题上添加更多的问题),您应该提供更多关于范围和上下文的信息。也就是说,你想达到什么目标。尽量不要让那个问题成为XY问题的一个例子。您试图实现的任何目标都可能需要重新设计API。使用指向int的简单指针和大小的结构作为参数是第一个猜测。你在C语言中使用指针方面很有经验,不是吗。如果不是对不起,我是新来的。。。我尝试制作一个矩阵,它的值由用户分配(最初dims[]值是通过scanf分配的),然后初始化它。我对指针一点经验都没有。无论如何,thx…@XcoderX询问完整的代码通常会导致“我不能,因为它太长,或者太秘密,或者…”。你可能会建议改做一个。好的,注意@Yunnosch!!哦,我明白了,虽然我不知道为什么。。。无论如何,我应该如何以不同的方式编写代码来解决这个问题呢?对于这个新问题的答案(请让它成为一个问题,而不是在这个问题上添加更多的问题),您应该提供更多关于范围和上下文的信息。也就是说,你想达到什么目标。尽量不要让那个问题成为XY问题的一个例子。您试图实现的任何目标都可能需要重新设计API。使用指向int的简单指针和大小的结构作为参数是第一个猜测。你在C语言中使用指针方面很有经验,不是吗。如果不是对不起,我是新来的。。。我尝试制作一个矩阵,它的值由用户分配(最初dims[]值是通过scanf分配的),然后初始化它。我对指针一点经验都没有。无论如何,thx…@XcoderX询问完整的代码通常会导致“我不能,因为它太长,或者太秘密,或者…”。你可能会建议改做一个。好的,注意@Yunnosch!!
void initialize_board(char board[][MAX_SIZE], int board_side[]);
void initialize_board(int m, int n, char board[m][n]) { ... }

int main ()
{
   int m, n;
   ... // initialize m and n here
   char board[m][n];
   initialize_board(m, n, board);
}