Это довольно простой, но я пытался решить его в течение нескольких часов без успеха. Этот код должен читать 3 ввода с пользовательского ввода, а затем, точки в соответствии с ints (n = сколько, d = размерность, k не имеет отношения к этой части) и создать их массив. По какой-то причине он выходит из строя во втором цикле, где ему не удается создать вторую точку, но я не уверен, почему. Я думаю, что это может иметь какое-то отношение к malloc, но я полностью потерян, буду признателен за любую помощь.Код падает на c, скорее всего, что-то связано с malloc?
Я вставил вход:
5 3 2
1.2 3.4 0.1
2 раз, прежде чем он упал.
код ниже:
int main(){
double* pdata;
int n,d,k;
scanf("%d %d %d",&n,&d,&k);
SPPoint* parr [n];
for(int i=0; i<n; i++)
{
double darr [d];
for(int j = 0; j < d-1; j++)
{
scanf(" %lf", &darr[j]);
}
scanf(" %lf", &darr[d-1]);
pdata = darr;
parr[i] = spPointCreate(pdata, d, i);
}
}
Это код функции spPointCreate:
struct sp_point_t{
double* data;
int dim;
int index;
};
SPPoint* spPointCreate(double* data, int dim, int index){
SPPoint* point = malloc(sizeof(SPPoint*));
if(point == NULL)
{
return NULL;
}
point->data = (double*) malloc(sizeof(data));
for(int i=0 ; i<dim ; i++)
{
point->data[i] = data[i];
}
point->dim = dim;
point->index = index;
return point;
}
Неверный размер. 'SPPoint * point = malloc (sizeof (SPPoint *));' -> 'SPPoint * point = malloc (sizeof * point);' То же самое для 'point-> data = malloc (sizeof * (point-> data)) ; ' – chux
Спасибо большое, похоже, сейчас работает! – Gray
Существуют и другие проблемы. – chux