Как вернуть локальный массив в C ++? - PullRequest
22 голосов
/ 14 октября 2011
char *recvmsg(){
    char buffer[1024];
    return buffer;
}

int main(){
    char *reply = recvmsg();
    .....
}

Я получаю предупреждение:

предупреждение C4172: возврат адреса локальной или временной переменной

Ответы [ 12 ]

0 голосов
/ 14 октября 2011

Вы размещаете массив в стеке внутри вашей функции recvmsg.Возврат указателя на эту память в какой-то момент приведет к неопределенному поведению, если он будет разыменован, поскольку память будет очищена при выходе из функции.

Если вы хотите вернуть указатель на память, вам необходимо выделитьэто динамически, используя malloc.

0 голосов
/ 14 октября 2011

Проблема в том, что вы возвращаете указатель на буфер, выделенный в стеке.Как только функция возвращается, этот буфер больше не действителен.

...