在 C 中使用指针时,我们何时以及为什么需要使用 malloc?

Suprit_young
 /* Note: The returned array must be malloced,
    assume caller calls free(). */
int* twoSum(int* nums, int numsSize, int target) {
    int *ans; //why error
    for(int i = 0; i < numsSize; i++){
        for(int j = i+1; j < numsSize; j++){
            if(nums[i] + nums[j] == target){
                ans[0] = i;
                ans[1] = j;
                break;
            }
        }
    }
    return ans;
}

为什么上面的代码不正确而下面的代码正确(malloc添加)?

 /* Note: The returned array must be malloced,
    assume caller calls free(). */
int* twoSum(int* nums, int numsSize, int target) {
    int *ans = (int*)malloc(2*sizeof(int)); //why not error
    for(int i = 0; i < numsSize; i++){
        for(int j = i+1; j < numsSize; j++){
            if(nums[i] + nums[j] == target){
                ans[0] = i;
                ans[1] = j;
                break;
            }
        }
    }
    return ans;
}
灌木丛

如果您不为 分配任何内容ans,则它包含一些垃圾值。尝试取消引用指针(即访问指针指向的内容),使用数组索引隐式执行的操作意味着您正在尝试读取/写入一些您不应该读取的任意内存位置。

尝试使用无效指针会调用未定义的行为这意味着您的程序可能会崩溃,可能会输出奇怪的结果,或者可能看起来工作正常。此外,进行看似无关的更改,例如额外调用printf调试、添加未使用的变量或使用不同的优化设置进行编译,都可以改变未定义行为的表现方式。

因此,仅仅因为程序似乎运行正常并不意味着没有问题。这只是意味着它可能会在您最不期望的时候出现。

指针需要指向某个有效的内存位置才能使用它。调用malloc分配一块内存并返回一个指向该内存的指针。将该地址分配给 后ans,您可以使用它来读取/写入分配的内存。这保证了您的程序将得到很好的定义。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我们在 c 中有更简单的代码时,为什么要使用 malloc 或 calloc?

来自分类Dev

我们何时以及为什么必须使用 malloc?

来自分类Dev

为什么我们在 C 中创建链表时不使用 malloc() 插入的 calloc() ?

来自分类Dev

为什么我们在c中使用函数返回指针以及函数返回指针的应用

来自分类Dev

为什么我们使用强制转换通过C中的malloc分配堆内存?

来自分类Dev

如果我们在 c 中使用 malloc 将内存分配给同一个指针两次会发生什么?

来自分类Dev

何时在 C 中使用 calloc 或 malloc

来自分类Dev

为什么在 C 中需要使用 malloc 进行动态内存分配?

来自分类Dev

为什么以及何时malloc()在C中不可用?

来自分类Dev

C:在malloc()中使用getpagesize()

来自分类Dev

为什么以及何时在 C 中使用指针?

来自分类Dev

在c中使用malloc时的自由变量

来自分类Dev

我们在用户输入过程中使用与号,但为什么在C分配过程中不需要使用与号?

来自分类Dev

为什么我们需要在C ++头文件中使用“ #if defined Identifier”?

来自分类Dev

为什么以及何时应该在C中使用指针到指针而不是简单的指针?

来自分类Dev

需要 C 编程帮助:指针和 malloc

来自分类Dev

在C中使用malloc保留内存

来自分类Dev

在C中使用malloc不起作用

来自分类Dev

为什么使用malloc的非常基本的C代码崩溃?

来自分类Dev

C中的malloc()何时返回NULL?

来自分类Dev

在使用C malloc的C ++构造函数中使用new

来自分类Dev

C:指针算术和 malloc() - 不行吗?

来自分类Dev

指向数组的指针的 malloc-C++

来自分类Dev

malloc用于C中的结构和指针

来自分类Dev

C 数组来存储 malloc 数组的指针

来自分类Dev

C ++ char指针大小在malloc之后超出

来自分类Dev

C - 使用 malloc() 的分段错误(核心愚蠢)

来自分类Dev

使用c中的malloc实现堆栈[BEGINNER]

来自分类Dev

在c中正确使用malloc()和free()

Related 相关文章

  1. 1

    当我们在 c 中有更简单的代码时,为什么要使用 malloc 或 calloc?

  2. 2

    我们何时以及为什么必须使用 malloc?

  3. 3

    为什么我们在 C 中创建链表时不使用 malloc() 插入的 calloc() ?

  4. 4

    为什么我们在c中使用函数返回指针以及函数返回指针的应用

  5. 5

    为什么我们使用强制转换通过C中的malloc分配堆内存?

  6. 6

    如果我们在 c 中使用 malloc 将内存分配给同一个指针两次会发生什么?

  7. 7

    何时在 C 中使用 calloc 或 malloc

  8. 8

    为什么在 C 中需要使用 malloc 进行动态内存分配?

  9. 9

    为什么以及何时malloc()在C中不可用?

  10. 10

    C:在malloc()中使用getpagesize()

  11. 11

    为什么以及何时在 C 中使用指针?

  12. 12

    在c中使用malloc时的自由变量

  13. 13

    我们在用户输入过程中使用与号,但为什么在C分配过程中不需要使用与号?

  14. 14

    为什么我们需要在C ++头文件中使用“ #if defined Identifier”?

  15. 15

    为什么以及何时应该在C中使用指针到指针而不是简单的指针?

  16. 16

    需要 C 编程帮助:指针和 malloc

  17. 17

    在C中使用malloc保留内存

  18. 18

    在C中使用malloc不起作用

  19. 19

    为什么使用malloc的非常基本的C代码崩溃?

  20. 20

    C中的malloc()何时返回NULL?

  21. 21

    在使用C malloc的C ++构造函数中使用new

  22. 22

    C:指针算术和 malloc() - 不行吗?

  23. 23

    指向数组的指针的 malloc-C++

  24. 24

    malloc用于C中的结构和指针

  25. 25

    C 数组来存储 malloc 数组的指针

  26. 26

    C ++ char指针大小在malloc之后超出

  27. 27

    C - 使用 malloc() 的分段错误(核心愚蠢)

  28. 28

    使用c中的malloc实现堆栈[BEGINNER]

  29. 29

    在c中正确使用malloc()和free()

热门标签

归档