我使用的是32位的Ubuntu虛擬機上Eclipse來對某個項目時。在嘗試實現一個結構或者試圖運行特定功能時,我遇到了一個很大的問題。的功能是這樣的一種:指針用C - 「段錯誤」構建矩陣
int count (matrix m, int v[], int w[], int col) {
int r=0;
int j=0;
while (j < m.length) {
int k=0;
bool aux=true;
while (k < col && aux){
if (v[k] == 1) {
if(m.i[j][k] != w[k])
aux=false;
}
k++;
}
if(aux) r++;
j++;
}
return r;
}
該函數接收一個矩陣(如下定義),與一和零(學習搜索哪個列,我們希望在這些列於查詢的值的向量和向量還列(等於長度的向量和矩陣),當它攻擊的數量第二個「如果」它給了我分段錯誤(我不明白它是什麼),我可以看到,這是不正確的定義這樣的說法,但我已經嘗試過,並試圖和我似乎無法找到一種方法來訪問向量中的值這裏緊跟我的結構矩陣:
typedef int *ind;
struct matrix {
ind *i;
int length;
};
typedef struct matrix matrix;
在這種ST我的矩陣有一個指針和長度(行數);指針指向一個指針向量(每行一個指針),每個指針都指向一個向量,實際上,這是我矩陣的一行。在這裏我去功能添加和創建一個空的矩陣:
matrix emptyS(int n, int col) {
matrix m;
int d=0;
m.length=0;
m.i=(ind*) malloc(sizeof(int)*n);
int x;
for (x=0; x < n; x++)
{
*m.i = (int*) malloc(sizeof(int)*col);
}
while (d<n){
m.i[d]=NULL;
d++;
}
return m;
} /*Updated*/
matrix add(matrix m,int v[]){
m.i[m.length+1]=v;
m.length++;
return m;
}
我知道這是一個很具體的問題,但我一直在瘋狂改變我的功能似乎並不能獲得成功。
你可以在崩潰的'if'和打印相關值('m','w','m.i','j','k')之前添加一個調試打印行嗎?或者在調試器中查看它們? – Vlad 2012-04-22 13:08:16