Передача значения структуры в функцию - PullRequest
3 голосов
/ 17 января 2011
#include<stdio.h>

struct classifier
{
    char src_address[15];
    char dst_address[15];
    int src_port;
    int  dst_port;
};

void display(struct classifier *ptr)
{
    printf("\n%s", ptr->src_address );
    printf("\n%s", ptr->dst_address );
    printf("\n%d", ptr->src_port);
    printf("\n%d", ptr->dst_port );
}

main()
{
    int i;
    struct classifier *ptr[4];
    for(i=0;i<2;i++)
    {
        scanf("%s",ptr[i]->src_address);
        scanf("%s",ptr[i]->dst_address);
        scanf("%d",&ptr[i]->src_port);
        scanf("%d",&ptr[i]->dst_port);
        display(ptr[i]);
    }
    return 0;
}

Я хочу отобразить вывод в функции.Когда я ввожу данные в первый раз, я получаю правильное отображение.Когда я ввожу данные во второй раз, отображается ошибка сегментации.Что не так в коде?Насколько я знаю, я правильно объявил указатели.Пожалуйста, помогите.

Ответы [ 4 ]

4 голосов
/ 17 января 2011

Вы только что объявили указатели, но они не указывают ни на что действительное. Вам необходимо выделить память для каждой структуры и сохранить ячейку памяти объекта в массиве.

РЕДАКТИРОВАТЬ: Это действительно, только если вы действительно хотите динамически распределять память. Еще используйте метод, предложенный @ ckv

4 голосов
/ 17 января 2011

Вам нужен массив структур, таких как

struct classifier ptr [4];

3 голосов
/ 17 января 2011

Вы не выделили память для struct classifier

Вы либо этого хотите,

struct classifier *ptr = (classifier*)malloc(4)

с последующим

free(ptr);

или

struct classifier ptr[4];
3 голосов
/ 17 января 2011
struct classifier *ptr[4];

В приведенном выше определении ptr - это массив (размером 4) для указателей типа классификатор структуры. Вы не выделили память для этих указателей, а переменная-указатель ptr[0..3] указывает на мусор

Вместо этого либо вы должны быть mallocing память, либо использовать

struct classifier ptr[4];

Это обеспечит ptr указание на действительные struct classifier переменные, расположенные в стеке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...