2013-12-15 5 views
0

Я выполнял некоторые упражнения по указателю на C, потому что у меня с ними какие-то проблемы. Я должен изменить некоторые значения в массиве, используя функцию void, но когда я запускаю код, он возвращает мне segfault. Вот код:изменение массива в функции c

#include <stdio.h> 
#include <stdlib.h> 

void change(int **v , int l) { 

    for (int i = 0 ; i < l ; i++) 
       *v[i] = 0 ; 

} 

int main (int argc , char** argv) { 

      int *v , l ; 
      scanf("%d",&l) ; 
      v = (int*) malloc(sizeof(int)*l) ; 

      for (int i = 0 ; i < l ; i++) 
        scanf("%d",&v[i]) ; 

      change(&v , l) ; 

      for (int i = 0 ; i < l ; i++) 
       printf("%d ",v[i]) ; 

      return 0 ; 
} 
+0

Причина для использования в качестве аргумента 'int ** v' What ? – BLUEPIXY

+0

'* v [i]' -> '(* v) [i]' – BLUEPIXY

ответ

4

Изменение:

void change(int **v , int l) 

в

void change(int *v , int l) 

затем

*v[i] = 0 ; 

к

v[i] = 0 ; 

затем

change(&v , l) ; 

в

change(v , l) ; 

Вам не нужно использовать указатель на указатель на int изменить элемент массива, просто передать указатель на первый из элемент массива.

0

Попробуйте

#include <stdio.h> 
#define MAX 20 
typedef int Values[MAX]; 

int changeArr(int vals2[]) { 
    vals2[0] = 200; 
    vals2[1] = 100; 
    printf("%d and ", vals2[0]); 
    printf("%d\n", vals2[1]); 
    return 0; 
} 

int main (int argc, char *argv[]) { 

    Values vals; 
    changeArr(vals); 
    printf("%d and ", vals[0]); 
    printf("%d\n", vals[1]); 
    return 0; 

} 

или

#include <stdio.h> 
#define MAX 20 
typedef int Values[MAX]; 

int changeArr(Values *vals2) { 
    (*vals2)[0] = 200; 
    (*vals2)[1] = 100; 
    printf("%d and ", (*vals2)[0]); 
    printf("%d\n", (*vals2)[1]); 
    return 0; 
} 

int main (int argc, char *argv[]) { 

    Values vals; 
    changeArr(&vals); 
    printf("%d and ", vals[0]); 
    printf("%d\n", vals[1]); 
    return 0; 

} 

Источник: How can I change an int array in a function

0

Просто сделайте ваш код работает, минимальное изменение кода, это изменить *v[i] = 0 ; к (*v)[i] = 0 ;

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