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

李庆圭

我写了一个代码,用定界符分割字符串。我希望函数获取一个字符串并返回其分割后的字符串。

实际上,除了一件事之外,它是可行的。当我给字符串“测试”,它的工作原理。但是当我输入字符串“ 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) != '\0')
    {    
        if (*(str + i) == ' ')
        {
            *(str_c + k) = '\0';
            k = 0;
            *(ret + j) = str_c;
            j++;
            i++;
            str_c = (char *)malloc(5);
        }
        *(str_c + k) = *(str + i);
        i++;
        k++;
    }
    *(str_c + k) = '\0';
    *(ret + j) = str_c;
    *(ret + j + 1) = NULL;
    return (ret);
}
丢失
ret = (char **)malloc(10);

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

ret = malloc(10 * sizeof *ret);

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

  • 不要转换结果 malloc
  • 请勿使用10等魔术数字5对于前者,至少要使用#define MAX_ARRAY_SIZE 10对于后者,您可以从原始副本中找出要复制的字符串的确切大小,这str将使您的代码更健壮,以防它与更长的子字符串一起使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果在同一指针(C)上两次使用malloc,会发生什么情况?

来自分类Dev

当我有两个指针指向同一个对象时会发生什么?

来自分类Dev

当我包装两次I / O流时会发生什么?

来自分类Dev

在同一指针上多次使用“新”

来自分类Dev

当我们在同一类中创建类的实例时会发生什么?

来自分类Dev

为什么VS2013在销毁唯一指针时会引发异常?

来自分类Dev

为什么我无法创建唯一指针

来自分类Dev

在方法中两次调用递归时会发生什么?

来自分类Dev

当我在C ++中对未初始化的指针调用“删除”时会发生什么?

来自分类Dev

现代c ++中的唯一指针

来自分类Dev

使用RTTI克隆唯一指针的向量

来自分类Dev

使用唯一指针作为类型的链表

来自分类Dev

如果您在两次部署在Tomcat中的战争中两次拥有同一个班级,将会发生什么?

来自分类Dev

为什么在Java内存模型中两次写入同一变量会发生冲突?

来自分类Dev

如果您在两次部署在tomcat的战争中两次拥有同一个班级,将会发生什么情况?

来自分类Dev

对象的过去一指针

来自分类Dev

当我使用多个模拟时间时会发生什么?

来自分类Dev

当我截断正在使用的文件时会发生什么?

来自分类Dev

当我使用多个模拟时间时会发生什么?

来自分类Dev

当我在代码中留下一些断点时会发生什么?

来自分类Dev

当我在代码中留下一些断点时会发生什么?

来自分类Dev

当我在Bash脚本中对函数使用`&`时会发生什么?

来自分类Dev

当我在C ++中对类使用vector时会发生什么

来自分类Dev

如果我在Spark中两次缓存相同的RDD,会发生什么情况?

来自分类Dev

与自定义分配器一起使用的最佳唯一指针是什么?

来自分类Dev

当我们第一次使用 Ember JS 启动我们的应用程序时会发生什么?

来自分类Dev

多个线程不能无错误地访问同一指针

来自分类Dev

唯一指针中的move构造函数和move赋值构造函数是什么?

来自分类Dev

为什么我不能在同一张表中两次使用datepicker?

Related 相关文章

  1. 1

    如果在同一指针(C)上两次使用malloc,会发生什么情况?

  2. 2

    当我有两个指针指向同一个对象时会发生什么?

  3. 3

    当我包装两次I / O流时会发生什么?

  4. 4

    在同一指针上多次使用“新”

  5. 5

    当我们在同一类中创建类的实例时会发生什么?

  6. 6

    为什么VS2013在销毁唯一指针时会引发异常?

  7. 7

    为什么我无法创建唯一指针

  8. 8

    在方法中两次调用递归时会发生什么?

  9. 9

    当我在C ++中对未初始化的指针调用“删除”时会发生什么?

  10. 10

    现代c ++中的唯一指针

  11. 11

    使用RTTI克隆唯一指针的向量

  12. 12

    使用唯一指针作为类型的链表

  13. 13

    如果您在两次部署在Tomcat中的战争中两次拥有同一个班级,将会发生什么?

  14. 14

    为什么在Java内存模型中两次写入同一变量会发生冲突?

  15. 15

    如果您在两次部署在tomcat的战争中两次拥有同一个班级,将会发生什么情况?

  16. 16

    对象的过去一指针

  17. 17

    当我使用多个模拟时间时会发生什么?

  18. 18

    当我截断正在使用的文件时会发生什么?

  19. 19

    当我使用多个模拟时间时会发生什么?

  20. 20

    当我在代码中留下一些断点时会发生什么?

  21. 21

    当我在代码中留下一些断点时会发生什么?

  22. 22

    当我在Bash脚本中对函数使用`&`时会发生什么?

  23. 23

    当我在C ++中对类使用vector时会发生什么

  24. 24

    如果我在Spark中两次缓存相同的RDD,会发生什么情况?

  25. 25

    与自定义分配器一起使用的最佳唯一指针是什么?

  26. 26

    当我们第一次使用 Ember JS 启动我们的应用程序时会发生什么?

  27. 27

    多个线程不能无错误地访问同一指针

  28. 28

    唯一指针中的move构造函数和move赋值构造函数是什么?

  29. 29

    为什么我不能在同一张表中两次使用datepicker?

热门标签

归档