我有一個分段錯誤,想知道我的錯誤在哪裏。二維數組上的指針
讓我解釋一下。
在我的主,我宣佈一個三維數組:int*** Matricegroupegeneralisant
那麼這主要使用功能recuperationinfoFich(&matricegroupegeneralisant);
此函數聲明爲:recuperationinfoFich(int* * * * matricegroupegeneralisant)
此功能recuperationinfoFich
使用另一個功能recuperationmatricegroupesgeneralisants(matricegroupegeneralisantA[Ni]);
此函數聲明as recuperationmatricegroupesgeneralisants(int*** matricegroupegeneralisant)
我的代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void allocationdynamiquetableautroisdimdentier(int**** Matrice,int nbniveau, int nbligne, int nbcolonne)
{
int i,j;
*Matrice=(int***) malloc (sizeof(int**)*nbniveau);
for (i=0; i<nbniveau; i++)
{
(*(Matrice))[i]=(int**) malloc (sizeof(int*)*nbligne); // allocation dynamique de la matrice Matrice
for (j=0; j<nbligne; j++)
{
((*(Matrice))[i])[j]=(int*) malloc (sizeof(int)*nbcolonne);
}
}
}
void recuperationmatricegroupesgeneralisants(int*** matricegroupegeneralisantA)
{
(*matricegroupegeneralisantA)[0][1]=1;
}
void recuperationinfoFich(int**** matricegroupegeneralisantA)
{
allocationdynamiquetableautroisdimdentier(matricegroupegeneralisantA,3, 3, 7);
recuperationmatricegroupesgeneralisants(matricegroupegeneralisantA[1]);
}
void main(int args, char **argv)
{
int*** matricegroupegeneralisantA;
recuperationinfoFich(&matricegroupegeneralisantA);
}
使用gdb:
(gdb) r
Starting program: /home/larimsna1/Desktop/a.out
Breakpoint 1, 0x000000000040061a in main()
(gdb) n
Single stepping until exit from function main,
which has no line number information.
Program received signal SIGSEGV, Segmentation fault.
0x00000000004005c8 in recuperationmatricegroupesgeneralisants()
(gdb)
您對調試做了什麼?你有沒有找到這個分部門?我會使用gdb或類似的方式來定位段落代碼 – dtech 2012-07-30 18:07:56
當遇到段落錯誤或任何其他類型的崩潰時,您應該做的第一件事就是使用調試器。它將幫助您找到發生崩潰的位置,並讓您檢查變量以查看可能導致崩潰的原因。 – 2012-07-30 18:08:18
此外,在正確調用'recuperationinfoFich'和'allocationdynamiquetableautroisdimdentier'時,您不會正確調用'recuperationmatricegroupesgeneralisants'。 _或在'recuperationmatricegroupesgeneralisants'中正確使用傳入的參數。 – 2012-07-30 18:11:19