2013-05-12 3 views
0

У меня есть программа на C, которая берет массив как входной, который будет сохраняться как 3 разных массива. Например:Печатать структуру, которая была передана как аргумент в функции

0 2 0 
1 0 0 
0 0 3 

будет сохранен как Elemenets = [2,1,3] и координата значений coresponding, Rows = [1,2,3] Columns = [2,1,3] в структурах я создаю.

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

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

После ввода ввода я пытаюсь напечатать массив с помощью function print2d(struct arrayCollection the array), но массив структуры, похоже, имеет неправильные номера внутри (адреса памяти?). Я думаю, что я делаю что-то неправильно со структурой, когда передаю ее как аргумент функции, но я не могу найти проблему. Я также попытался передать структуру по ссылке как указатель, но у меня были те же результаты.

Вот мой program

Мой язь Xcode и компилятор яблочно LLVM компилятор 4,1

ответ

0

Ваш структура только имеет указатели, а не фактические массивы. Эти указатели указывают на локальные массивы, и когда функция возвращается, эти локальные массивы больше не существуют, поэтому ваши указатели указывают на что-то недействительное. Попытка получить доступ к данным через эти указатели - это неопределенное поведение.

Альтернативой будет динамическое выделение памяти для данных с помощью malloc, и вместо этого указатели вашей структуры указывают на динамически распределенную память.

+0

Я думаю, что получаю то, что вы говорите, но когда я пытаюсь напечатать массив значений внутри main, когда возвращается структура, он работает (просто говоря). Не могли бы вы показать мне пример или источник того, что вы имеете в виду во второй части вашего ответа? (Знание C не так: /) – ozmax

+0

@ozmax: «неопределенное поведение» означает, что иногда это может сработать, но вы не можете рассчитывать на него. –

+0

@ozmax: Вы можете найти более подробную информацию здесь: http://en.wikipedia.org/wiki/C_dynamic_memory_allocation –

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