【发布时间】:2010-10-17 17:29:36
【问题描述】:
作为一名训练中的黑客,我决定制作自己的 string_reverse 函数,该函数接受一个字符串,为新字符串分配内存,并返回一个指向新字符串的指针,但我没有得到我想要的需要,因为这会返回分段错误。
#include <stdio.h>
#include <stdlib.h>
char* string_reverse(char* string);
char* string_reverse(char* string) {
int len = 0;
for (int i = 0; *(string + i) != '\0'; ++i)
len++;
char* result = (char*)malloc(len * sizeof(char));
if (result == NULL){
puts("Pointer failure");
exit(EXIT_FAILURE);
}
for (int i = 0; *(string + i) != '\0'; ++i)
*(result + (len - i)) = *(string + i);
return *result;
}
int main() {
char* str= "Ni Hao!";
char* result = string_reverse(str);
printf("%s\n", result);
free(result);
return 0;
}
作为回报,我收到以下调试消息:
Starting program: /home/tmo/string_reverse
Program received signal SIGSEGV, Segmentation fault.
0xb7e5b3b3 in strlen () from /lib/i686/cmov/libc.so.6
我应该如何解释这个结果?
【问题讨论】:
-
注意你的编译器给你的警告。如果它没有给你任何东西,那就得到一个更好的编译器。 GCC 说:x.c: In function `string_reverse': x.c:21: warning: return makes pointer from integer without a cast
标签: c debugging segmentation-fault