我通过使用函数调用并在函数中声明我的矩阵并使用在每行和每列中写入'1'来做一些实验。但是一段时间后程序崩溃并停止工作。
示例一:每次在while循环中调用矩阵时都会声明矩阵
void func(int row, int col){
int matrix[row][col];
for....
write one in the matrix...
}
示例二:矩阵在函数外部声明为全局
int matrix[row][col];
void func(){
for....
write one in the matrix...
}
主要代码
int main(){
while(1){
func(...);
}
}
我的问题是,只要我的矩阵在函数内声明,我的代码就会崩溃,但只要在函数外声明它就不会崩溃。你们知道问题为什么会这样吗?矩阵不是函数中的时间值,意味着在函数执行后它不会被删除吗?
答案 0 :(得分:-1)
在函数内声明时,矩阵在堆栈内分配。如果矩阵变得足够大,它将尝试在堆栈外读/写并导致分段错误。 在任何函数之外声明它是静态分配的,并在可执行文件中分配(更多详细信息here)。