@noame

Returning 'int (*)[(sizetype)(*sizeMas)]' from a function with incompatible return type 'int *' [-Wincompatible-pointer-types] в Си. Что делать?

#include <stdio.h>

#include "bubble-sort.c"

int* arrayFilling(int *sizeMas);

int main()
{
	int sizeMas;

	int *mas = arrayFilling(&sizeMas);
	bubbleSort(mas, sizeMas);  // Файл сортировки
}

int* arrayFilling(int *sizeMas)
{
	printf("Enter number of digits: ");
	scanf("%d", &(*sizeMas));	

	int mas[*sizeMas];

	for (int i = 0; i < *sizeMas; i++)
	{
		printf("Enter %d number: ", i + 1);
		scanf("%d", &mas[i]);
	}
	printf("\n");
	for (int i = 0; i < *sizeMas; ++i)
	{
		printf("%d ", mas[i]);
	}

	return &mas; // На эту строчку жалуется gcc
}


Вот что пишет компилятор:

binary-search.c: In function 'arrayFilling':
binary-search.c:33:9: warning: returning 'int (*)[(sizetype)(*sizeMas)]' from a function with incompatible return type 'int *' [-Wincompatible-pointer-types]
   33 |  return &mas;
      |         ^~~~
binary-search.c:33:9: warning: function returns address of local variable [-Wreturn-local-addr]
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
mas уже указатель. Массивы в C - указатели. Не надо & использовать где вы его возвращаете. Только в этом случае оно скомпилируется, но работать не будет, потому что mas - локальный массив. По выходу из функции это будет указатель на отчищенную память. Надл выделять массив через malloc.
Ответ написан
Комментировать
vabka
@vabka
Токсичный шарпист
Ты пытаешься вернуть указатель на массив на стеке, который станет не валидным после выхода из функции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы