三维malloc'的分段断层;ed阵列
当我编译并退出C代码时,我得到了一个分段错误。当我尝试运行GDB时,结果如下:三维malloc'的分段断层;ed阵列,c,segmentation-fault,C,Segmentation Fault,当我编译并退出C代码时,我得到了一个分段错误。当我尝试运行GDB时,结果如下: Program received signal SIGSEGV, Segmentation fault. 0x0000000000400998 in main (argc=2, argv=0x7fffffffe208) at test.c:107 所涉行: if((p_l2p[p_bp][p_rp][p_cp] & FULL) == 0) 变量声明: unsigned long long ***p_l2p
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400998 in main (argc=2, argv=0x7fffffffe208) at test.c:107
所涉行:
if((p_l2p[p_bp][p_rp][p_cp] & FULL) == 0)
变量声明:
unsigned long long ***p_l2p; //Primary L2P[P_Bank][Row][Cas]
p_l2p = (unsigned long long ***)malloc(sizeof(int **)*P_BANK);
for(i=0;i<P_BANK;i++) // set s[P_Bank][Row]
{
p_l2p[i] = (unsigned long long **)malloc(sizeof(int*)*ROW);
for(j=0;j<ROW;j++) // set s[P_Bank][Row][CAS]
{
p_l2p[i][j] = (unsigned long long *)malloc(sizeof(int)*CAS);
}
}
int p_bp; //Bank Point
int p_rp; //Row Point
int p_cp; //Cas Point
unsigned long***p_l2p//小学L2P[P_Bank][Row][Cas]
p_l2p=(无符号长***)malloc(sizeof(int**)*p_银行);
对于(i=0;i
此分段错误的原因是什么
分配的内存不足
int
的大小小于此处的无符号long
的大小
避免尺寸计算错误-其中有1个是最内部的
分配给对象的大小,而不是类型
the_type_is_irrelevant ***p_l2p;
// p_l2p = (unsigned long long ***)malloc(sizeof(int **)*P_BANK);
p_l2p = malloc(sizeof *p_l2p * P_BANK);
for(i=0; i<P_BANK; i++) {
// p_l2p[i] = (unsigned long long **)malloc(sizeof(int*)*ROW);
p_l2p[i] = malloc(sizeof p_l2p[i][0] * ROW);
for(j=0; j<ROW; j++) {
// p_l2p[i][j] = (unsigned long long *)malloc(sizeof(int)*CAS);
p_l2p[i][j] = malloc(sizeof p_l2p[i][j][0]* CAS);
}
}
如果p_l2p
被定义为指向无符号long-long
(通常为8个字节)的指针,为什么在mallocing时给它sizeof(int)
(通常为4个字节)?非常感谢!
p_l2p = malloc(sizeof *p_l2p * P_BANK);
if (p_l2p == NULL && P_BANK > 0) {
Handle_Out_of_Memory();
}