まず第一に、私はネットワークに関する情報を探していて、gdb のデバッグでテストを行っていると言いますが...何もありません...私はまだエラーを理解していません。「getline」命令から来ている可能性があると思います、 確信はないけど...
コードの主なアイデアは、行ごとに読み取り、chars 文字列を float に変換し、呼び出された配列に float を保存してからnfloat
、関数 *create_table* を呼び出して vector 型のポインターの配列を作成することです。
入力はこれ.txt
を含む です: n = 文字列の数、この場合はn = 3
3
[9.3,1.2,87.9]
[1.0,1.0]
[0.0,0.0,1.0]
最初の数値3
は、画像でわかるようにベクトルの数ですが、その数値は静的ではなく、入力は の代わりに5
またはなどにすることができます。7
3
これまでのところ、次のことを始めましたが、コードにはいくつかのメモリエラーがあると思います:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
float* data;
int size;
} vector;
vector *create_vector(int n, float* comps){
vector newvect;
newvect.data = (float *) malloc(n*sizeof(float));
int i;
for(i = 0; i < n; i++) {
newvect.data[i] = comps[i];
printf("Newvec.data[%d] = %.1f\n", i, newvect.data[i]);
}
newvect.size = n;
vector *pointvector;
pointvector = &newvect;
return(pointvector);
}
int NumsVector(char *linea, ssize_t size){
int numsvector = 1;
int n;
for(n = 2; n<= size; n++){
if (linea[n] != '[' && linea[n] != ']'){
if(linea[n] == 44){
numsvector = numsvector + 1;
}
}
}
return numsvector;
}
int main(){
int n, i;
scanf("%d\n", &n);
vector *v[n];
for(i = 0; i<n; ++i) {
char *line = NULL;
size_t len = 0;
ssize_t read;
read = getline(&line,&len,stdin);
int numsvector = NumsVector(line, read);
float nfloat[numsvector];
int j = 0;
/* Replaces the end ] with a , */
line[strlen(line) - 1] = ',';
/* creates a new pointer, pointing after the first [ in the original string */
char *p = line + 1;
do
{
/* grabs up to the next comma as a float */
sscanf(p, "%f,", &nfloat[j]);
/* moves pointer forward to next comma */
while (*(p++) != ',');
}
while (++j < numsvector); /* stops when you've got the expected number */
v[i] = create_vector(numsvector, nfloat);
printf("%f\n", v[i]->data[1]); //prints ok :)!
free(line);
}
printf("%f\n", v[i]->data[1]); //segmentation fault:11 :(!! }
さて、問題はprintf命令に付属していると思います。ループ内で印刷するとすべて正常に動作しますが、forループから同じことを実行しようとすると、セグメンテーション違反エラーが出力されます...メモリリークの可能性があります?
*v[n] 情報に基づいて関数を作成し続けるために、*v[n] が適切に実装され、情報が適切に保存されているかどうかを知ることが重要です。
ループを印刷するときに問題がどこにあるかを理解するのを手伝ってくれませんか?