2013-11-18 3 views
1

Программа попадает в бесконечный цикл. Но arr->countprintf печатает нормальное значение (например, 4). count имеет тип unsigned int и arr является указателем на int. В чем проблема? печатает цикл обр значения в первом, а затем продолжает печатать значения от TrashПочему существует бесконечная петля?

В arrat_get печатает массив просто отлично

struct _arr { 
    size_t count; 
    int* arr; 
} ; 

typedef struct _arr array_t; 


array_t* array_get(FILE* file){ 
    int* arr = NULL; 
    size_t count = 0; 
    array_t* arr_t; 
    array_t temp; 
    int i = 0; 

    if (!file) { 
     fprintf(stderr, "there is no such file\n"); 
     return; 
    } 



    if (fscanf(file, "%u", &count) == EOF) { 
     fprintf(stderr, "can't read count from file\n"); 
     return; 
    } 

    temp = array_create(arr, count); 
    arr_t = &temp; 

    printf("%i\n", arr_t->count); 


    for (i = 0; i < arr_t->count; i++){ 
     if (fscanf(file, "%d", &arr_t->arr[i]) == EOF) { 
      fprintf(stderr, "can't read arr from file\n"); 
      return; 
     } 
    } 

    for (i = 0; i<arr_t->count; i++) 
     printf("%d ", arr_t->arr[i]); 
    printf("\n"); 

    return arr_t; 
} 


int main(){ 
    array_t* arr_t; 
    int i = 0; 


    printf("enter count and arr:\n"); 
    arr_t = array_get(stdin); 

    printf("count in main=%u\n", arr_t->count); 
    for (i = 0; i<arr_t->count; i++) 
     printf("%d ", arr_t->arr[i]); 



    getch(); 

    return 0; 
} 
+0

обязательно .. смотреть .. код – amdixon

+3

пожалуйста покажите код, который устанавливает это, в комплекте с определением типа вашей структуры. – dasblinkenlight

+0

Вы действительно вызываете 'printf' только в теле цикла? Если вы делаете что-то более сложное, возможно, что ошибка «один за другим» изменяет значение 'i' и/или' arr_t-> count'. Попробуйте также напечатать 'i' и' arr_t-> count' внутри цикла, и все должно стать яснее. – user4815162342

ответ

0

Это не решение вашей проблемы, но может помочь вам найти:

#include <stdio.h> 
#include <stdlib.h> 

struct _arr { 
    int count; 
    int* arr; 
} ; 


int main(){ 
    int i = 0; 
    struct _arr myArray[10]; 

    for (i = 0; i < 10; i++) { 
     myArray[i].count = 9; 
     myArray[i].arr = &myArray[i].count; 
    } 


    for (i = 0; i < (myArray->count); i++) 
     printf("%d %p\n", myArray[i].count, myArray[i].arr); 


    return 0; 
} 

ВЫВОД:

Compiling the source code.... 
$gcc main.c -o demo -lm -pthread -lgmp -lreadline 2>&1 

Executing the program.... 
$demo 
10 0x7fffeb764c00 
10 0x7fffeb764c10 
10 0x7fffeb764c20 
10 0x7fffeb764c30 
10 0x7fffeb764c40 
10 0x7fffeb764c50 
10 0x7fffeb764c60 
10 0x7fffeb764c70 
10 0x7fffeb764c80 
Смежные вопросы