проблема с передачей указателя из функции

Тема в разделе "Общие вопросы по С и С++", создана пользователем messsir, 20 апр 2008.

  1. messsir

    messsir Гость

    писал программу и столкнулся с тем, что написанная функция для инициализации указателя не возвращает в точку вызова записанную по адресу строку.... никак не могу понять почему((( помогите, пожалуйста! заранее благодарен :angry:
    Посмотреть вложение 1.c
     
  2. Yason

    Yason Гость

    При вызове make_stroke(str), содержимое переменной str (а именно - неинициализированный мусор) копируется в стек. Функция make_stroke() получает это значение в виде локальной переменной new_stroke, и присваивает всяческие значения этой самой локальной переменной new_stroke. После того, как функция закончила свою работу, стек (содержащий переменную new_stroke) очищается, и значение new_stroke (указывающее на считанную строку) теряется.
    Переменная str во всём этом деле участвовала только на этапе копирования её значения в стек.

    Правильнее было бы одно из двух:
    1) выделять память в main и передавать инициализированный указатель в функцию (а также размер выделенной памяти, чтобы следить за переполнением)
    2) если действительно хочется, чтобы память выделялась по мере необходимости,
    Код (Text):
    char* make_stroke(){
    char* new_stroke=(char *)malloc(2*sizeof(char));
    ...
    return (new_stroke);
    }

    int main(){
    char *str = make_stroke();
    ...
    }
    P.S. не забудьте free(str) :angry:
     
  3. messsir

    messsir Гость

    большое спасибо за помощь! разобрался :angry:
     
  4. biz

    biz Гость

    Код (Text):
    #include <stdio.h>
    #include <string.h>
    #include <conio.h>
    #include <stdlib.h>

    void make_stroke( char **new_stroke )
    {
    char    buff[256];
    scanf( "%s", buff );
    *new_stroke = (char *)malloc( strlen( buff ) * sizeof( char ) + 1 );
    strcpy( *new_stroke, buff );
    }

    void main( void )
    {
    char *  str;
    printf( "please, enter: " );
    make_stroke( &str );
    printf( "\n%s", str );
    fflush( stdout );
    getch();
    }
    так мне кажется попроще будет!!...
     
Загрузка...
Похожие Темы - проблема передачей указателя
  1. lemuriez
    Ответов:
    25
    Просмотров:
    4.067
  2. c0de3r
    Ответов:
    4
    Просмотров:
    109
  3. DobermannTT
    Ответов:
    10
    Просмотров:
    130
  4. SoulPaladin
    Ответов:
    3
    Просмотров:
    118
  5. Artael
    Ответов:
    1
    Просмотров:
    106

Поделиться этой страницей