2015-06-14 63 views
1

我正在學習編寫本機擴展,並注意到奇怪的情況。當我分配一個多維數組並且像這樣訪問它時:(請原諒我可能會使用的任何混亂的C代碼和不正確的操作,除非它們可能是我的錯誤的原因,我的C不是那麼好)我的C不是很好)dart VM是否對本機擴展的堆棧內存大小施加限制?

int table[rows][cols]; //rows and cols are both > 1 
memset(table, 0, sizeof(int) * rows * cols); 

我得到一個分段錯誤,如果我這樣做

table[rows-1][cols-1]; 

,但如果我分配表所示:

table = (int**)malloc(XLEN * sizeof(int *)); 
if (table == NULL) { 
    ... error ... 
} 

for (i=0; i < XLEN; i++) { 
    table[i] = (int*)malloc(YLEN * sizeof(int)); 
    if (table[i] == NULL) { 
    ... error ... 
    } 
    memset(table[i], 0, sizeof(int) * YLEN); 
} 

然後一切工作正常。爲什麼會這樣呢?

+0

檢查'row'和'col'的值是否爲零?因爲'table [rows-1] [cols-1]'會變成'table [-1] [ - 1]' –

+0

抱歉不澄清,用代碼註釋更新。這些值總是> 1 – imkendal

+0

您能否包含導致分段錯誤的案例的最小示例? –

回答

1

也許問題是在第一種情況下,你在堆棧上分配一個數組?
如果您將在函數之外使用對此數組的引用(在函數返回後),您將始終得到分段錯誤。

請給出一個使用你的數組的小例子,你會得到更多有用的建議。

+0

啊,這是它。謝謝。我需要更新範圍和內存管理。 – imkendal