2016-02-08 2 views
0

Итак, я пытаюсь сделать программу для чтения файла ppm и сохранить его в памяти, у меня все работает с цветами, эта функция дает мне проблемы:Для остановки цикла без причины

typedef struct{ 
    int red, green, blue; 
} COLOR; 

COLOR * getNextColor(FILE *fd); 

COLOR **getColors(FILE *fd, int width, int height){ 
    printf("\nentered get colors"); 
    COLOR **colors = malloc(sizeof(COLOR*)*height); 
    printf("\nallocated %d space height",height); 

    int i,j; 
    for(i = 0; i < height; i++, colors++){ 
     *colors = malloc(sizeof(COLOR)*width); 
     printf("\nallocated %d space width",width); 
     for(j = 0; j < width; j++, *colors++){ 
      printf("\nlooping through to get the colors for point (%d,%d)", j,i); 
      //*colors = getNextColor(fd); 
     } 
     *colors -= width; 
     printf("\nmoved the pointer for *colors back %d spaces",width); 
    } 

    colors -= height; 
    printf("\nmoved the pointer for colors back %d spaces",height); 

    return colors; 
} 

Я передаю в указатель файла, который в данный момент указывает на первую цифру первого цвета, ширина = 400 и высота 530. Результат выглядит следующим образом:

allocated 530 space height 
allocated 400 space width 
looping through to get the colors for point (0,0) 
looping through to get the colors for point (1,0) 
looping through to get the colors for point (2,0) 
... 
looping through to get the colors for point (398,0) 
looping through to get the colors for point (399,0) 
moved the pointer for *colors back 400 spaces 
allocated 400 space width 
looping through to get the colors for point (0,1) 
looping through to get the colors for point (1,1) 
... 
looping through to get the colors for point (398,1) 
looping through to get the colors for point (399,1) 
moved the pointer for *colors back 400 spaces 
allocated 400 space width 

и рисунок повторы это полностью до

looping through to get the colors for point (399,36) 

затем аварии. Есть идеи?

+0

Долгое время с тех пор, как я ничего не делал в C++, единственное, что я вижу, и не думаю, что это связано .. Это вы делаете * colors - = width; и сделайте это без * более поздних цветов - = height; –

+0

Что вы пробовали? Вы пытались использовать отладчик, чтобы увидеть, где именно он сбой? Часто это полезный намек. – skyking

+0

Когда дело доходит до отладчиков и C Я немного придурок, я просто изучаю C от изучения Java, а отладчик eclipse для java намного лучше, чем все, что я нашел для C, но отладчик, кажется, не дает мне нужна информация, просто куча адресов. Вот почему я застрял в терминах + распечатывать заявления, если кто-то может порекомендовать мне один, который легко подобрать и хорошо использовать, тогда я открыт для предложений – James

ответ

3

Существует проблема с *colors++, что, вероятно, не означает, что вы думаете, что это так. Это связано с приоритетом оператора, высокий приоритет имеет постфиксные операции приращения/уменьшения, а более низкий приоритет имеет косвенное отношение. So *colors++ фактически среднийst *(colors)++ который не имеет смысла. Вероятно, вы имели в виду (*colors)++

+0

Молодец, я идиот, спасибо. Работает как шарм. Я буду отмечать вас правильно, как только смогу^_ ^ – James

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