Как вернуть указатель в качестве параметра функции - PullRequest
15 голосов
/ 13 марта 2011

Я пытаюсь вернуть указатель данных из параметра функции:

bool dosomething(char *data){
    int datasize = 100;
    data = (char *)malloc(datasize);
    // here data address = 10968998
    return 1;
}

но когда я вызываю функцию следующим образом, адрес данных меняется на ноль:

char *data = NULL;
if(dosomething(data)){
    // here data address = 0 ! (should be 10968998)
}

Что я делаю не так?

Ответы [ 2 ]

25 голосов
/ 13 марта 2011

Вы передаете по значению. dosomething изменяет свою локальную копию data - вызывающая сторона никогда этого не увидит.

Используйте это:

bool dosomething(char **data){
    int datasize = 100;
    *data = (char *)malloc(datasize);
    return 1;
}

char *data = NULL;
if(dosomething(&data)){
}
2 голосов
/ 13 марта 2011
int changeme(int foobar) {
  foobar = 42;
  return 0;
}

int  main(void) {
  int quux = 0;
  changeme(quux);
  /* what do you expect `quux` to have now? */
}

То же самое с вашим фрагментом.

C передает все по значению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...