i具有以下代码,该代码适用于n = 10 and c = 25,但如果我使用n = 50且c = 25500
,则具有分割故障的炸弹#include <stdio.h>
#include <stdlib.h>
// create table
int *table;
table = (int *) malloc(sizeof(int) * C+1 * N+1);
if(table == NULL){
printf("[ERROR] : Fail to allocate memory.n");
}
// initialize table
for(i =0; i < N-1; i++){
for(j = 0; j < C-1; j++){
//table[i*(C+1)+j]=0;
*(table + (i*(C+1)+j))=1;
}
}
printf("table maden");
我相信您分配的内存数量不正确。您正在分配C*sizeof(int) + N + 1
,您想分配(C+1)*(N+1)*sizeof(int)
您只是错过了一些parens -http://en.wikipedia.org/wiki/operators_in_c_and_cd_c++#Operator_precedence
假设int = 4,因此您分配
4*50 + 1*25500 + 1 = 25701 bytes
在您的循环中您访问(最后):
i = 49
j = 25499
49*(25501)+25499 = 1275048(index)*4 = 5100192 (offset)
所以您需要的是:
table = malloc(sizeof(int) * (C+1) * (N+1));
您的循环也不适用于较小的值,只是没有崩溃。在分配的内存之外写作是不确定的行为。
作为旁注,与您的崩溃无关:我会施放malloc的结果吗?