2014-11-21 14 views
1

ОК, поэтому я новичок в C и не могу понять, почему это не сработает. Результат - это просто ошибка (null) сегментации.Любая идея, почему я получаю ошибку сегментации?

У меня есть массив структур (адрес), который я динамически выделяю вместе с указателями, содержащимися в адресных структурах. Я пытаюсь сортировать адреса по названиям улиц, поэтому мне приходится разбираться по строке и получать подстроку, которая появляется после начального пробела. Например: для «123 Anywhere St.» мне нужно получить подстроку «Anywhere St.», для сравнения этих строк для сортировки.

Что я делаю неправильно, что может быть причиной этого?

/*Prints the array sorted from a-z by street name*/ 
void printStreetSortedArray(Address * array, int total) 
{ 
    int i; 
    int j, k, z; 
    char temp1[256], *sub_string1; 
    char temp2[256], *sub_string2; 
    Address tmpAdd; 

    for(i=0; i<total-1; i++) 
    { 
     for(j=i+1; j<total; j++) 
     { 
      //Get the two substrings (street names) for comparison 
      strcpy(temp1, array[i].street); 
      z = 0; 
      while(temp1[z] != ' ') 
      { 
       z++; 
      } 
      sub_string1 = temp1+z+1; 

      strcpy(temp2, array[j].street); 
      z = 0; 
      while(temp2[z] != ' ') 
      { 
       z++; 
      } 
      sub_string2 = temp2+z+1; 

      //Compare street names and swap addresses 
      if(strcasecmp(sub_string2, sub_string1) < 0) 
      { 
       tmpAdd = array[i]; 
       array[i] = array[j]; 
       array[j] = tmpAdd; 
      } 
     } 
    } 

    //If I print using this format, it will work correctly 
    /*printAddress(array[0]); 
    printf("\n"); 
    printAddress(array[1]); 
    printf("\n"); 
    printAddress(array[2]); 
    printf("\n");*/ 

    //Trying to print with this format causes a segmentation fault 
    for(k=0; k<total; k++); 
    { 
     printAddress(array[k]); 
    } 
} 

Все мои другие методы сортировки отлично работают при печати с использованием цикла for. Вот как я выделил массив и адрес строки в моем методе заполнения массива:

/*Allocate memory for array of Addresses*/ 
    myAdd = (Address*)malloc((*total)*sizeof(Address)); 

и:

fgets(line, sizeof(line), fin); 
line_length = strlen(line); 
line[line_length-1] = '\0'; line_length--; 
myAdd[i].street = malloc(line_length+1); 
strcpy(myAdd[i].street, line); 

Может кто-нибудь порулить меня в правильном направлении? Это похоже на то, что я потерял указатель на массив или что-то в этом роде. Спасибо за помощь.

+0

.... И получается, что я просто манекен. У меня есть ';' после объявления for for for. Теперь все могут игнорировать этот вопрос. –

ответ

1

У меня был ';' после объявления цикла for. Ты понятия не имеешь, как я себя чувствую.

//Trying to print with this format causes a segmentation fault 
for(k=0; k<total; k++); //<-- ';' 
{ 
    printAddress(array[k]); 
} 

Должно быть:

for(k=0; k<total; k++)// <-- no ';' 
{ 
    printAddress(array[k]); 
} 

После 5 часов, глядя на него, я, наконец, увидел его.

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