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

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

Похожие вопросы