C函数中的SIGSEGV

时间:2016-10-14 18:10:57

标签: c sigsegv

我的功能有问题。

当函数获得这样的参数时,一切正常

char text[50] = "Liquorice gummies macaroon";

但是当我发送这个时,我得到了SIGEGV

char  *text = "Liquorice gummies macaroon";

我的功能:

char *sort(char *text) {

    int length = strlen(text);
    char *sortString = text;

    if (length >1){
        shell_sort(sortString, length);
        return sortString;
    } else if(length == 1) {
        return text;
    }
}

在函数排序中,我调用shell_sort

void shell_sort(char *text, int size) {

    int gap, temp, i , j;

    for (gap = size/2; gap > 0; gap /= 2) {

        for (i = gap; i<size; i++) {
            temp = text[i];

            for (j = i; j >= gap ;j-=gap) {
                if (temp < text[j-gap]) {
                    text[j] = text[j-gap];
                } else {
                    break;
                }
            }
            text[j] = temp;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

  

但是当我发送这个时,我得到了SIGEGV

     

char * text =&#34; Liquorice gummies macaroon&#34 ;;

那是因为你的函数shell_sort()修改了传递给它的参数,修改字符串文字是undefined behaviour。这就是它导致段错误的原因(顺便说一下,C标准不保证段错误。)

  

当函数获得这样的参数时,一切正常

     

char text [50] =&#34; Liquorice gummies macaroon&#34 ;;

从字符串文字初始化char数组时,字符串文字复制到数组中,您可以修改该数组。所以它按预期工作。