2012-06-14 2 views
2

Я пытаюсь создать функцию, которая добавит два вектора вместе, но я получаю 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; 
} 

Я не могу найти здесь проблему, поэтому любые ответы будут оценены.

+0

Вы пробовали работать в отладчике? – ecatmur

+0

У вас 'unsigned int' для' s', но параметр 'vectorAppend' -' size_t', у двух не гарантируется одинаковый размер – Attila

ответ

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

должно быть

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

Унарное * имеет удивительно низкий приоритет.

+0

Спасибо. Вот и все. – Odingod

Смежные вопросы