为什么此代码会导致分段错误?

时间:2012-04-08 11:57:55

标签: c segmentation-fault

我正在编写一个返回字符串的第一个nn <= strlen(src))字符的函数。

char* substring(char *src, int n)
{
   char *substr;
   int i;
   for (i = 0; i < n; i++)
     *substr++ = *src++;
   src = src - n;
   *substr = '\0';
   return substr - n;
}

此函数仅在调用一次时返回正确的答案,但在多次调用时返回Seg Fault。

2 个答案:

答案 0 :(得分:5)

没有为substr分配内存,因此该函数会对未初始化的指针进行处理,并且正在写入不应导致未定义行为的内存。它第一次运作的事实是完全的机会。

substr分配内存:

char* substr = malloc(n + 1); /* Plus one for null teminator. */

请注意substring()的调用方必须free()返回的缓冲区。

答案 1 :(得分:0)

您需要为子字符串函数中的char * substr分配内存。你现在正在破坏记忆,导致段错误。一个简单的:     char * substr =(char *)malloc(sizeof(char)* n + 1); 应该做的。