【发布时间】:2017-05-12 05:38:12
【问题描述】:
这是非常基本的,但我已经尝试解决了几个小时,但没有成功。这段代码应该从用户输入中读取 3 个整数,然后根据整数进行点数(n = 多少,d = 维度,k 与这部分无关)并创建它们的数组。由于某种原因,它在第二个循环中崩溃,无法创建第二个点,但我不确定为什么。我认为这可能与 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)); -
非常感谢,现在似乎可以工作了!
-
其他问题也存在。