2012-03-01 3 views
-1

Я создал 2d массив структур, и теперь я хочу присвоить значения x, y и z. Любые идеи, из которых возникает ошибка сегментации?Ошибка сегментации при работе с 2d массивом структур в c

struct xyz 
{ 
    int x; 
    int y; 
    int z; 
}; 

char buf[80]; 

struct xyz array[width][height]; 

for(row=1;row<=width;row++) 
{ 
    for(col=1;col<=height;col++) 
    { 
     fgets(buf,80,file); 
     array[row][col].x = strtol(buf, NULL, 10); 
     fgets(buf,80,file); 
     array[row][col].y = strtol(buf, NULL, 10); 
     fgets(buf,80,file); 
     array[row][col].z = strtol(buf, NULL, 10); 
    } 
} 
+1

индекс массив от 0 до тусклого-1, а не от 1 до тусклого –

ответ

1

SI есть причина, по которой вы бежите от 1 до высоты/столба? В C все массивы начинаются с 0 и заканчиваются длиной-1.

В другом слове для петель должен выглядеть следующим образом:

for(row=0;row<width;row++) 
{ 
    for(col=0;col<height;col++) 
    { 
3

Массивы начинаются с 0 в C. Вы выходите за рамками отведенного пространства, так как вы обращаетесь array[width]. Может быть, вы хотите:

for(row = 0; row < width; row++) 
     ^ ^

Помните, что если вы объявите type array[LENGTH], это никогда не бывает, чтобы коснуться элемента array[LENGTH]. Последний действительный элемент: LENGTH - 1.

+0

Хорошо я туп. Благодаря! Не уверен, почему я думал, что 1 была хорошей идеей для строки и столбца, никогда не использовала ее до – user1048723

3

Ваши петли выходят за пределы за финальной итерации.

Ваш размер массива width широкий и глубокий height, поэтому первый индекс [0][0] и максимальный действительный показатель [width - 1][height - 1]. Тем не менее, вы используете <= в своих условиях, поэтому вы на самом деле индексируете [width][height] на последней итерации.

Кроме того, массивы начинаются с индекса 0, не 1, поэтому начните ваши петли из 0 вместо 1 и использовать <, не <=.

+0

+1, чтобы ответить на вопрос 1 минута перед другим парнем. – ApprenticeHacker

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