SIGSEGV在C函数中
问题描述:
我的函数有问题。SIGSEGV在C函数中
当函数获取这样的参数,一切正常
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;
}
}
}
答
但是当我送这个,我得到SIGEGV
字符*文字= “甘草软糖马卡龙”;
那是因为你的函数shell_sort()
修改传递给它的参数,修改字符串文字是undefined behaviour。这就是为什么它会导致段错误(顺便说一句,segfault并不能保证C标准)。
当函数获得这样的参数,一切正常
字符文本[50] = “甘草橡皮糖蛋白杏仁”;
当从一个字符串初始化char
数组文本,字符串文字是复制到阵列,它可以修改。所以它按照你的预期工作。
感谢您的回答。请问是否有一个简单的解决方案来修复这个错误? – Bando
您已经知道解决方案。如果你想修改它,使用一个数组('char text [50]')。 –