プロジェクトで作業するために、32 ビット Ubuntu 仮想マシンで Eclipse を使用しています。構造を実装しようとしているとき、または特定の関数を実行しようとしているときに大きな問題があります。関数は次のとおりです。
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;
}
この関数は、行列 (以下で定義)、1 と 0 を含むベクトル (検索する列を学習するため)、それらの列で検索する値を含むベクトル、および列の数 (ベクトルの長さに等しい) を受け取ります。 2番目の「if」に当たると、セグメンテーション違反が発生し(それが何であるか理解できません)、そのように定義するのは正しくないことがわかりますが、試してみましたが、できますベクトル内の値にアクセスする方法が見つからないようです。ここに私の構造体行列を示します。
typedef int *ind;
struct matrix {
ind *i;
int length;
};
typedef struct matrix matrix;
この構造では、私のマトリックスにはポインターと長さ (行数) があります。ポインターはポインターのベクトル (各行に 1 つのポインター) に移動し、これらのポインターのそれぞれは、実際には行列の私の行であるベクトルに移動します。空の行列を追加して作成する関数を次に示します。
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;
}
これが非常に具体的な質問であることは知っていますが、機能を変更することに夢中になっていて、成功していないようです。