Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Netscaper

Пользователь


Сообщения: 84
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вот пример.
Код: Выделить весь код
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int *wrong_func()
{
    int b[6] = {0, 1, 2, 3, 4, 5};
    int *ptr;
    ptr = &b[0];
    return ptr;
}

int *solve_func()
{
    int *b;
    int i;
    b = (int *)malloc(sizeof(int) * 6);
    for (i = 0;i < 6; i++)
        b[i] = i;
    return b;
}

void main()
{
    int *c;
    int i;
    c = wrong_func();
    for(i = 0;i < 6; i++)
        printf("%d ",c[i]);
    printf("\n");
    c = solve_func();
    for(i = 0;i < 6; i++)
        printf("%d ",c[i]);
    printf("\n");
    free((void *)c);
    getchar();    
}
Первая функция wrong_func возвращает указатель на массив, который указывается внутри этой функции. Как видно, возвращается непонятно что. Дело в том, что этот массив создается только для этой функции (я не хочу углублятся в принципы организации памяти) и, следовательно, значения будут иметь место только в ней. Намного проще использовать динамический массив, например, как в функции solve_func, который создается и иницилизируется внутри неё. Дело в том, что динамический массив создается (функция malloc)«глобально» и будет действителен, пока не будет вызвана функция free (будет уничтожен). Надеюсь, понятно изложил. Хотя, всё-таки, присоединяюсь к мнению hasherfrog, про то, что книжки надо читать. Желательно без чьей-либо помощи. Проще говоря, разобраться самому.

Отправлено: 01:30, 10-01-2005 | #23