程序收到信号 SIGSEGV,分段错误。 C++
Program received signal SIGSEGV, Segmentation fault. C++
我在调试期间遇到此错误(*s = *end; 行),同时尝试使用指针反转字符串。
我正在使用 Windows 10 OS、代码块 IDE 和 GDB 调试器。
#include <stdio.h>
#include <string.h>
#include <limits.h>
void myreverse(char* s);
int main()
{
char* s1 = "1234";
myreverse(s1);
printf("%s", s1);
return 0;
}
void myreverse(char* s) {
char tmp;
char* end = s + strlen(s) - 1;
for(; s < end; s++, end--) {
tmp = *s;
*s = *end;
*end = tmp;
}
}
您应该将 s1
更改为 char s1[] = "1234";
,因为您正在对字符串进行更改。
然后在你的 myreverse()
函数中,你永远不会使用 tmp
变量,这会使你的交换块失败。
固定:
#include <cstdio> // use the C++ versions of the header files
#include <cstring>
void myreverse(char* s) {
char tmp;
char* end = s + std::strlen(s) - 1;
for(; s < end; s++, end--) {
// swap
tmp = *s;
*s = *end;
*end = tmp; // use tmp
}
}
int main() {
char s1[] = "1234";
myreverse(s1);
printf("%s", s1);
}
注意交换块中的3行可以用std::swap(*s, *end);
and also that myreverse()
can be completely replaced with std::reverse(std::begin(s1), std::end(s1));
代替。
我在调试期间遇到此错误(*s = *end; 行),同时尝试使用指针反转字符串。 我正在使用 Windows 10 OS、代码块 IDE 和 GDB 调试器。
#include <stdio.h>
#include <string.h>
#include <limits.h>
void myreverse(char* s);
int main()
{
char* s1 = "1234";
myreverse(s1);
printf("%s", s1);
return 0;
}
void myreverse(char* s) {
char tmp;
char* end = s + strlen(s) - 1;
for(; s < end; s++, end--) {
tmp = *s;
*s = *end;
*end = tmp;
}
}
您应该将 s1
更改为 char s1[] = "1234";
,因为您正在对字符串进行更改。
然后在你的 myreverse()
函数中,你永远不会使用 tmp
变量,这会使你的交换块失败。
固定:
#include <cstdio> // use the C++ versions of the header files
#include <cstring>
void myreverse(char* s) {
char tmp;
char* end = s + std::strlen(s) - 1;
for(; s < end; s++, end--) {
// swap
tmp = *s;
*s = *end;
*end = tmp; // use tmp
}
}
int main() {
char s1[] = "1234";
myreverse(s1);
printf("%s", s1);
}
注意交换块中的3行可以用std::swap(*s, *end);
and also that myreverse()
can be completely replaced with std::reverse(std::begin(s1), std::end(s1));
代替。