Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2012, 02:19   #1
erro
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 11
По умолчанию Передать указатель на указатель в функцию

Всем доброго дня. Вообщем есть задачка: прочитать из файла сколько угодно строк размера SIZE в динамический массив указателей. Проблема в том, что выделение памяти отлично работает в теле функции, где объявляется этот самый указатель на указатель для двумерного массива. Я все закомментировал, чтобы понятнее было.
Код:
#define SIZE 128

void test(char** st, char* buf, int *count)
{
    ++(*count);
    printf("%d %s\n", *count, buf); // check
    st = realloc(st, *count * sizeof(char*));
    st[*count - 1] = (char*)malloc(sizeof(char) * SIZE);
    memcpy(st[*count - 1], buf, SIZE);
}

int main(void)
{
    char **arr = NULL;
    int count = 0;
    char str[] = "test";

/* так работает отлично */
//    arr = realloc(arr, sizeof(char*));
//    arr[0] = (char*)malloc(SIZE);
//    memcpy(arr[0], str, sizeof(str)/sizeof(char));
//    printf("%s", arr[0]);
    
/* так ошибка сегментирования */
    test(arr, "dasd", &count);
    printf("%s", arr[0]);

    return 0;
}

Последний раз редактировалось Stilet; 29.10.2012 в 10:53.
erro вне форума Ответить с цитированием
Старый 29.10.2012, 03:40   #2
bedman
Пользователь
 
Регистрация: 24.07.2012
Сообщений: 28
По умолчанию

Код:
test(&arr, "dasd", &count);
bedman вне форума Ответить с цитированием
Старый 29.10.2012, 10:08   #3
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Не будет так работать. Перед тем как передавать указатель в функцию его нужно проициализировать.
Код:
arr = (char**)calloc(100,sizeof(char*));
for(int i = 0; i<100;i++)
    arr[i] = (char*)calloc(100,sizeof(char*));
test(arr, "dasd", &count);
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 29.10.2012, 17:59   #4
erro
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 11
По умолчанию

вообщем, всем спасибо за то что уделили времени немножко. Я решил, что объявлю этот arr массив глобально.
Цитата:
arr = (char**)calloc(100,sizeof(char*));
for(int i = 0; i<100;i++)
arr[i] = (char*)calloc(100,sizeof(char*));
test(arr, "dasd", &count);
тогда, наверно, можно было сразу сделать
Код:
char* arr[100] // не динамический же
. Вот последнее что я пытался сделать
Код:
void test(char*** st, char* buf, int *count)
{
    ++(*count);
    *st = realloc(*st, *count * sizeof(char*));
    *st[*count - 1] = (char*)malloc(sizeof(char) * SIZE);
    memcpy(*st[*count - 1], buf, SIZE);
   // вызываю так test(&arr, "test1", &count)
}
Записывался и выводился только первый элемент, дальше ошибка сегментирования.

Последний раз редактировалось erro; 29.10.2012 в 18:11.
erro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать указатель на файл функции v01d Общие вопросы C/C++ 7 01.01.2013 07:56
Как передать указатель на функцию в функцию WIN32APIist Общие вопросы C/C++ 1 27.01.2011 10:35
Передать картинку как указатель RIO Мультимедиа в Delphi 3 20.01.2011 21:05
Как передать в функцию указатель на String avd Общие вопросы C/C++ 6 06.06.2010 17:52
Как передать указатель в процедуру??? kate4ka Общие вопросы Delphi 1 17.03.2008 12:49