Существует программа для чтения из файла и возврата структуры.Ошибка сегментации после возврата указателя на структуру
struct ion_bin
{
int freq;
long height;
int amplitude;
};
//Dynamic auto allocating array
typedef struct {
struct ion_bin *array;
size_t used;
size_t size;
} Ionogram;
void freeArray(Ionogram *a); //free memory
void insertArray(Ionogram *a, struct ion_bin element); //realloc memory
void initArray(Ionogram *a, size_t initialSize); //malloc memory
Ionogram* read(int argn, char* argv[])
{
FILE* stream;
Ionogram ionogramObj;
//fill ionogram from file by initArray and insertArray
//.....
return &ionogramObj;
}
int main(int argn, char* argv[])
{
Ionogram* r = read(argn, argv);
fprintf(stderr,"Array size: %d Used %d\n",r->size, r->used); //SEGMENTATION FAULT ERROR
//int second = (*(r->array + 2)).amplitude; //YET SEGMENTATION FAULT ERROR TOO
//fprintf(stderr, "%d", second);
return 0;
}
Эта программа компилируется успешно, но во время выполнения и отладки сегментации пожаров ошибок неисправностей (SIGSEGV) попытки получать полей возвращаемой структуры (в основном методе) Как исправить эту ошибку?
Или вернуть указатель на статически выделенную структуру. –
@BlagovestBuyukliev Правда, но у него есть и другие недостатки (например, повторное включение и защита потоков). –
@BlagovestBuyukliev: такой совет немного напоминает рассказчику, который тормозит левой ногой.Конечно, это полезный навык, если вы стремитесь к F1, но давайте сначала не будем усложнять ситуацию. – Bathsheba