知道我为什么会出现分段错误吗?

时间:2014-11-21 09:32:23

标签: arrays pointers struct segmentation-fault

好的,所以我是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循环打印时,我的所有其他排序方法都能正常工作。以下是我在fill数组方法中分配数组和地址行的方法:

/*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);

任何人都可以引导我朝着正确的方向前进吗?这就像我丢失了数组指针或其他东西。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我有一个&#39 ;;&#39;在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个小时后,我终于看到了它。