Я пытаюсь создать функцию, которая добавит два вектора вместе, но я получаю segfault при попытке перераспределить больше памяти на первый вектор, чтобы второй соответствовал. Вот кодПерераспределение массива в C
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;
}
Я не могу найти здесь проблему, поэтому любые ответы будут оценены.
Вы пробовали работать в отладчике? – ecatmur
У вас 'unsigned int' для' s', но параметр 'vectorAppend' -' size_t', у двух не гарантируется одинаковый размер – Attila