2016-02-24 1 views
-1

Я провел несколько экспериментов с помощью вызова функции и объявления моей матрицы в функции и использовал для записи «1» в каждой строке и столбце. Однако через некоторое время программа выйдет из строя и перестанет работать.Объявление матрицы в функции и вне функции в качестве глобальной матрицы

Пример один: Матрица объявляется каждый раз, когда он вызывается в цикле в то время как

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(...); 

     } 
} 

Мой вопрос к вам в том, что мой код сбой, когда моя матрица объявлена ​​внутри но не сбой, когда он объявлен вне функции. Вы, ребята, знаете, почему проблема такая? Не является ли матрица временным значением в функции, то есть не будет ли она стерта после выполнения функции?

+1

Вы либо пишете вне границ массива, либо создаете переменную в стеке, которая слишком велика. Конечно, нам нужно увидеть ваш полный код. – dbush

+0

было бы полезно, если вы покажете свой фактический код – Cherubim

+0

его Okey. Я получил свой ответ. Я не думаю, что код необходим для этой конкретной проблемы. – bopia

ответ

-1

При объявлении внутри функции матрица выделяется внутри стека. Если ваша матрица становится достаточно большой, она попытается прочитать/написать за пределами стека и вызвать ошибку сегментации. Объявляя его вне любой функции, он статически выделяется и выделяется внутри вашего исполняемого файла (подробнее here).

+0

Да, вы правы, всякий раз, когда я проверял свои данные, я мог скомпилировать, но мои данные, которые мне нужны, были другой переменной довольно странной. Поэтому проблема заключалась в том, что моя матрица [100] [100] была большой = 100 * 100 * 4 (байты) = 40000 байт, то это может привести к некоторой ошибке сегментации. – bopia

Смежные вопросы