• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Как возвратить указатель на массив?

  • Автор темы acorn
  • Дата начала
A

acorn

В условии задачи: "Функция должна вернуть указатель на массив". Не знаю как, не получается :D
 
Z

zubr

Код:
int MyArray[100];

int* MyFunc()
{
//Какой то код
return MyArray;
}
 
A

acorn

Не очень понятно, как получить этот указатель. Вот мой код (который не работает):
Код:
#include <iostream>
using namespace std;

int* fSimple(int intMax)
{
int Array[100];
Array[0] = 2;
int intCount = 1;
bool bGood;
for (int i = 3; i < intMax; i++)
{
bGood = true;
for (int j = 1; j < intCount; j++)
if (i%Array[j] == 0) bGood = false;
if (bGood) Array[++intCount] = i;	
}
Array[0] = intCount;
return Array;
}


int main()
{
int *p = fSimple(100);
for (int i = 1; i < p[0]; i++)
cout << p[i] << " ";
return 0;
}

P.S. просьба учесть, что эту функцию мне надо в отдельную библиотеку поместить.
 
E

European

Ты возвращаешь указатель на локальный массив, что делать нельзя, т.к. область видимости данного массива - функция fSimple. С учетом того, что fSimple должна быть в библиотеке и возвращать указатель на массив, то Array нужно объявить как static
 
A

acorn

Вопрос #2, я динамически создаю структуры в функции, как сделать, чтобы они були доступны в теле программы? На static ругается.
 
E

European

Если не стоит задача возвращать указатель из функции, то лучше создать указатель на структуру вне функции, передать его в функцию, создать структуру, инициализировав переданный указатель
 
?

-=

Можно ещё так:
Код:
void main()
{
int arr[100];
int addr;
asm{
mov ax,offset arr
mov addr,ax
}
}
в переменную addr помещается адрес массива arr.
 
E

European

Для: -=ФИЛОСОФ=-
Получить адрес массива и вернуть валидный указатель на массив из функции это не одно и тоже
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!