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);
}
然後一切工作正常。爲什麼會這樣呢?
檢查'row'和'col'的值是否爲零?因爲'table [rows-1] [cols-1]'會變成'table [-1] [ - 1]' –
抱歉不澄清,用代碼註釋更新。這些值總是> 1 – imkendal
您能否包含導致分段錯誤的案例的最小示例? –