在 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 条评论
登录 后参与评论

相关文章

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

malloc用于C中的结构和指针

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

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

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

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

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

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

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

在C中使用malloc不起作用

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

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

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

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

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

在C中使用malloc保留内存

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

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

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

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

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

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

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

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

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

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

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

何时在 C 中使用 calloc 或 malloc

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