2016-03-21 1 views
0

Я пытаюсь получить доступ к структуре с указателем на целое, от main. Но программа вылетает из строя. Он должен быть построен с опцией «std = c99», поскольку это требование в тесте.segfault при попытке доступа к структуре; compile option - gcc -std = c99

Код выглядит следующим образом:

#include <stdio.h> 
#include <malloc.h> 

struct Results{ 
    int *A; 
    int N; 
}; 
struct Results solution(int A[], int N, int K) { 
    struct Results result; 
    // write your code in C99 (gcc 4.8.2) 
    int* T = (int*) malloc(N*sizeof(int)); 
    result.A = A; 
    result.N = N; 
    int count = 0; 
    while(count < K) 
    { 
     for(int i = 0; i < N; i++) 
     { 
      if(i > 0) 
      { 
       T[i] = A[i-1]; 
      } 
      else 
      { 
       T[0] = A[N-1]; 
      } 
     } 
     count++; 
     for(int i = 0; i < N; i++) 
     { 
      A[i] = T[i]; 
     } 
    }; 
    for(int i = 0;i < N; i++) 
    { 
     A[i] = T[i]; 
    } 

    return result; 

} 

struct Results solution(int A[], int N, int K); 

void main() 
{ 
    int B[5] = {3,8,9,7,6}; 
    struct Results st; 
    solution(B,sizeof(B),1); 
} 

Проблема заключается в строке: "раствор (В, SizeOf (В), 1);" Что я делаю неправильно?

Пожалуйста, помогите.

+0

1) Не выдавайте результат 'malloc' & friends в C. 2) Зачем использовать прототип _after_ определения функции (что подразумевает декларирование). – Olaf

+1

1) @iharob имеет правильный ответ, но вы также должны помнить о том, чтобы освободить выделенную память с помощью 'malloc' ... и ... почему вы используете' malloc'? Возможно, вы хотели написать 'result.N = T;' вместо 'result.N = N;'? – Myst

ответ

3

Вы видите sizeof(B) дал бы количество элементов в B раз размером с int, используйте sizeof(B)/sizeof(B[0]) вместо этого.

+0

Да @iharob. Спасибо. – rsmitha

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