Вернуть массив из функции (C программирование) - PullRequest
3 голосов
/ 07 апреля 2020

Я пытаюсь сделать изображение вектора (упражнение из школы), поэтому я использую заголовки. Есть два файла и одна функция.

Сначала я создал вектор

Vector vector;
GLOBAL_ERROR_CODE = initVector(&vector,3);
if(GLOBAL_ERROR_CODE>0) return printGlobalError();                                          
printf("Vector inited\n"); 

Позже, пытаясь напечатать его

char * vectorPhotography;
GLOBAL_ERROR_CODE = seeVector( &vector, vectorPhotography );
if(GLOBAL_ERROR_CODE>0) return printGlobalError();                                           

Итак, функция seeVector вот эта

int seeVector(Vector * vector, char * vectorPhotography){
     char * vectorStrSize = (char *) malloc(sizeof(char));
     int ErrorCode = integerToString(vector->size, vectorStrSize);
     if(ErrorCode>0) return ErrorCode;
     char * arrayPhotography = (char *) malloc(sizeof(char));
     if(ErrorCode>0) return ErrorCode;
     ErrorCode = seeArray(vector->array, arrayPhotography, vector->size);
     if(ErrorCode>0) return ErrorCode;
     if(vectorPhotography) free(vectorPhotography);
     vectorPhotography = (char *) malloc(sizeof("{\nSize:,\nArray:,\n}") + sizeof(arrayPhotography) + sizeof(vectorStrSize));
     if(vectorArray == NULL) return RESERVE_MEMORY_FAIL;
     strcat(vectorPhotography, "{\nSize:");
     strcat(vectorPhotography, vectorStrSize);
     strcat(vectorPhotography, ",\nArray:");
     strcat(vectorPhotography, arrayPhotography);
     strcat(vectorPhotography, ",\n}");
     return 0; 
}

Так вот, в функции seeVector после алгоритма значение vectorPhotography следующее:

(gdb) print vectorPhotography 
$3 = 0x5555557576f0 "{\nSize:\003,\nArray:[][][],\n}"

Но когда я возвращаюсь к основной функции, значение равно NULL

(gdb) print vectorPhotography
$4 = 0x0

При запуске я получаю это

Vector inited
Vector:(null)

Итак, мои данные потеряны, я не понимаю, как вернуть вектор, над которым я работал (мне нужен возврат для ошибки коды)

1 Ответ

1 голос
/ 07 апреля 2020

Что вам нужно сделать, это передать ссылку на массив char vectorPhotography, чтобы вы могли получить доступ к обновленному значению после вызова функции. Это может включать изменение сигнатуры функции на int seeVector(Vector * vector, char ** vectorPhotography), изменение вызова функции на seeVector( &vector, &vectorPhotography ), а затем изменение использования vectorPhotography внутри вашей функции на *vectorPhotography, поэтому вы меняете значение, на которое указывает локальный параметр

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