@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]
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
mas уже указатель. Массивы в C - указатели. Не надо & использовать где вы его возвращаете. Только в этом случае оно скомпилируется, но работать не будет, потому что mas - локальный массив. По выходу из функции это будет указатель на отчищенную память. Надл выделять массив через malloc.
Ответ написан
Комментировать
vabka
@vabka
Токсичный шарпист
Ты пытаешься вернуть указатель на массив на стеке, который станет не валидным после выхода из функции.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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