Я работаю над программой, которая должна обрабатывать файл изображения PGM формыПопутных Структуры в С
P2
24 7
11
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 11 11 11 11 0 11 0 0 0 11 0 0 11 0 0 0 11 0 0 0 11 0 0
0 11 0 0 0 0 11 0 0 0 11 0 11 0 11 0 0 11 11 0 0 11 0 0
0 11 11 11 11 0 0 11 0 11 0 0 11 11 11 0 0 11 0 11 0 11 0 0
0 11 0 0 0 0 0 11 0 11 0 11 0 0 0 11 0 11 0 0 11 11 0 0
0 11 11 11 11 0 0 0 11 0 0 11 0 0 0 11 0 11 0 0 0 11 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
я иметь следующую структуру для хранения данных и функции инициализации
struct Image {
int row, column;
int maxValue;
unsigned int data[MAXLINELENGTH];
}
Image * Image_Init()
{
Image tmp_Image;
tmp_Image.row = 0;
tmp_Image.column = 0;
int i;
for (i = 0; i < MAXLINELENGTH; i++)
{
tmp_Image.data[i] = 0;
}
return &tmp_Image;
}
Это дает мне предупреждение о том, что функция возвращает адрес локальной переменной. Я хочу создать в основном объект Image и передать его. Как мне это сделать?
Спасибо
EDIT ===================================
Я, кажется, в состоянии использовать
Image * Image_Init()
{
Image *tmp_Image;
tmp_Image->row = 0;
tmp_Image->column = 0;
int i;
for (i = 0; i < MAXLINELENGTH; i++)
{
tmp_Image->data[i] = 0;
}
return tmp_Image;
}
Теперь у меня возникают проблемы с тем, где мне нужно читать данные из массива. Я использую ту же базовую структуру
Image * Image_Init_From_Array (unsigned int height, unsigned int width, unsigned int *data)
{
Image *tmp_Image;
tmp_Image->row = width;
tmp_Image->column = height;
tmp_Image->maxValue = 255;
int i;
for (i = 0; i < MAXLINELENGTH; i++)
{
tmp_Image->data[i] = data[i];
}
return tmp_Image;
}
Это компилируется нормально, но в результате ошибки сегментации.
Вы можете передать указатель на 'tmp_Image' в качестве аргумента в функции' Image_Init'. –
Для части редактирования: tmp_Image является диким указателем в то время, указывая в любом месте и доступ к этой памяти вызывает SEGFAULT – LostBoy