当我在同一个指针中使用 malloc() 两次时会发生什么?

  • 本文关键字:两次 指针 同一个 malloc c
  • 更新时间 :
  • 英文 :


我编写了一个代码来通过分隔符拆分字符串。 我希望函数获取一个字符串并返回其除以的字符串。

除了一件事之外,它实际上有效。 当我给字符串"测试"时,它有效。 但是当我给出字符串"1234 4567"时,我可以访问值"4567",但不能访问"1234"。(垃圾值。 还有"1234 2345 3456 ..."仅在第一个参数"1234"中产生垃圾值。

我认为使用 malloc(( 两次会导致同一个指针出现问题,但事实并非如此。 我的代码有什么问题?

char    **ft_set_char(char *str)
{    
int     i;
int     j;
int     k;
char    *str_c;
char    **ret;
k = 0;
j = 0;
ret = (char **)malloc(10);
str_c = (char *)malloc(5);
i = 0;
while (*(str + i) != '')
{    
if (*(str + i) == ' ')
{
*(str_c + k) = '';
k = 0;
*(ret + j) = str_c;
j++;
i++;
str_c = (char *)malloc(5);
}
*(str_c + k) = *(str + i);
i++;
k++;
}
*(str_c + k) = '';
*(ret + j) = str_c;
*(ret + j + 1) = NULL;
return (ret);
}
ret = (char **)malloc(10);

这是不正确的,因为它分配 10 个字节而不是 10 个char *元素。它应该是:

ret = malloc(10 * sizeof *ret);

其他不相关的问题,但应注意最佳做法:

  • 不要投射malloc的结果
  • 不要使用像105这样的幻数。对于前者,至少使用#define MAX_ARRAY_SIZE 10.对于后者,您可以计算出要从原始str复制的字符串的确切大小 - 这将使您的代码更加健壮,以防它与较长的子字符串一起使用。

最新更新