2011-01-17 2 views
3
#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; 
} 

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

+2

Почему вы объявляя указатели на структуры, а не массив структур? –

ответ

4

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

структура классификаторов PTR [4];

4

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

EDIT: Это действительный только в том случае, если вы действительно хотите распределить память динамически. Иначе использовать метод, предложенный @ckv

3
struct classifier *ptr[4]; 

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

Вместо либо вы должны быть mallocing памяти или с помощью

struct classifier ptr[4];

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

3

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

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

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

затем,

free(ptr); 

или

struct classifier ptr[4]; 
+0

Это C, а не C++ ... –

+0

ну, второй вариант - C –

Смежные вопросы