2013-12-18 48 views
1

我的問題如下:儘管此代碼是確定賽格故障

#include <stdio.h> 

int main(void) { 
    double array[128][128][128]; 

    printf("done"); 

    return 1; 
} 

此代碼返回一個賽格故障(核心轉儲)

#include <stdio.h> 
double array[128][128][128]; 

int main(void) { 

    printf("done"); 

    return 1; 
} 

當然是內存問題,因爲如果我把主要功能放在聲明裏面:

float array[127][128][128]; 

該代碼運行良好。另一方面,如果我使用「malloc」在主函數內部分配多維數據集,代碼也可以正常工作。 我無法理解這個原因。有一個簡單的解釋?

感謝

回答

1

是的,你是正確的,這是因爲當你把雙array[128][128][128];main那麼它裏面是不是由您的操作系統支持在棧上分配更多的內存字節。

但是,當它分配在main之外時,它會從應用程序池外部獲取內存,因此您看不到任何錯誤。

+0

我懷疑這是操作系統,而是編譯器設置。可能有一個編譯器(或鏈接器)開關允許更大的堆棧。 –