在C中重新分配数组

时间:2012-06-14 13:09:57

标签: c arrays pointers realloc

我正在尝试创建一个将两个向量附加在一起的函数,但是当我尝试将更多内存重新分配给第一个向量时,我最终得到了一个段错误,因此第二个向量适合。这是代码

void vectorAppend(double** v1, size_t* s1, double const* v2, size_t s2){
  assert(v1 && v2 && *s1 > 0 && s2 > 0);
  (*v1) = realloc((*v1), (*s1 + s2)*sizeof(double));
  for (size_t i = 0; i < s2; i++){
    *v1[*s1+i]=v2[i];
  }
  *s1+=s2;
}

这就是我从主

中称呼它的方式
double *v1 = vectorConstruct(3, 2);
double *v2 = vectorConstruct(3, 0);
unsigned int s = 3;
vectorAppend(&v1, &s, v2, 3);

vectorConstruct返回一个指向初始化为第二个参数的向量的指针。

double* vectorConstruct(size_t s, double val){
  assert(s>0);
  double *ret = malloc(s*sizeof(double));
  for(size_t i = 0; i < s;i++){
    ret[i]=val;
  }
  return ret;
}

我似乎无法在这里找到问题所以任何答案都值得赞赏。

1 个答案:

答案 0 :(得分:7)

*v1[*s1+i]=v2[i];

应该是

(*v1)[*s1+i]=v2[i];

一元*的优先级低得惊人。