LINUX.ORG.RU

Задачка с массивом строк на Си


0

0

code:

#include .....

int setdata(char**);

int main(int argc, char** argv)

{

char** str_arr;

set_data(str_arr);

printf("First string: &s\n", str_arr[0]);

printf("Second string: &s\n", str_arr[1]);

retirn 0;

}

int setdata(char** arr)

{

arr =malloc( sizeof(char**) *2);

arr[0] =strdup("STRINGXXXX1");

arr[1] =strdup("STRINGXXXXXXX2");

return 0;

}

Программа после setdata сегфолтится. Ошибка гдето у меня в

синтаксисе в main перед распечатыванием.

Ткните меня носом пожалуйста где я не прав.

anonymous

arr =malloc( sizeof(char**) *2); -- локальная переменная, на main::str_arr она никак не повлияет.

Либо возвращай ее:

char ** setdata(void)
{
   char** arr=malloc();
   ...
    return arr;
}

либо 

setdata(char*** arr), а в main() set_data(&str_arr)

Die-Hard ★★★★★
()

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int setdata(char ***);

int main(int argc, char **argv)
{
    char **str_arr;

    setdata(&str_arr);

    printf("First string: %s\n", str_arr[0]);

    printf("Second string: %s\n", str_arr[1]);

    return 0;
}

int setdata(char ***arr)
{
    *arr = malloc(sizeof(char*) * 2);

    (*arr)[0] = strdup("STRINGXXXX1");
    (*arr)[1] = strdup("STRINGXXXXXXX2");

    return 0;
}

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

Спасибо вам господин Кустов я понял свою ошибку.

anonymous
()
Ответ на: комментарий от php-coder

>А кто будет вызывать free() на результаты malloc() и strdup()?

такого рода программы можно считать "презервативами" :) такие же одноразовые (по отношению к памяти). так что можно и не париться.

ты же не моешь презерватив прежде чем выкинуть? :)

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.