Mik*_*son 6 c segmentation-fault
在下面的代码中,行:
*end = *front;
Run Code Online (Sandbox Code Playgroud)
给出了分段错误.我在这里问了一个类似的问题,但我不确定这是不是因为我有两份num.请解释为什么它是seg-faulting.谢谢.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* getPalin(char* num);
int main()
{
char* num = (char*)malloc(100);
num = "123456";
printf("%s\n", getPalin(num) );
return 0;
}
char* getPalin(char* num)
{
int length = strlen(num);
if ( length % 2 == 0 )
{
char* front = num;
char* end = num + strlen(num) - 1; //pointer to end
while( front != num + (length/2) ) //pointers not middle yet
{
*end = *front;
printf("%c", *end);
front++;
end--;
}
}
return num;
}
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 17
这两行:
char* num = (char*)malloc(100);
num = "123456";
Run Code Online (Sandbox Code Playgroud)
有以下效果.
第一个分配100个字节并设置num为指向那些字节.
第二个将num更改为指向字符串"123456",这几乎肯定是在只读存储器中.
任何更改只读内存内容的尝试都将导致分段违规.您需要在尝试更改之前将字符串复制到malloc'd中num,并使用:
strcpy (num, "123456");
Run Code Online (Sandbox Code Playgroud)
这就是你现在应该拥有的那条线:
num = "123456";
Run Code Online (Sandbox Code Playgroud)