没有malloc分配动态数组

时间:2016-01-02 15:08:36

标签: c arrays dynamic malloc allocation

即使未使用malloc,数组是如何创建的?

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n,i,*ptr,sum=0;
    printf("Enter number of elements: ");
    scanf("%d",&n);
    printf("Enter elements of array: ");

    for(i=0;i<n;++i)
    {
        scanf("%d",ptr+i);
        sum+=*(ptr+i);
    }

    printf("Sum=%d",sum);
    free(ptr);
    return 0;
}

1 个答案:

答案 0 :(得分:2)

数组未被创建&#34;。它被宣布。然后它没有被定义或初始化。你用吧。

未定义的行为。

如果您使用更严格的编译器,那么您将得到:

 warning: ‘ptr’ may be used uninitialized in this function [-Wmaybe-uninitialized]

因此它实际上不是动态

我认为更大的问题是free(ptr)会发生什么:

可能也是未定义的行为。由于传递未初始化的指针,因此指针的值不明确。这可能是偶然NULL但不限于此。

大局:

访问任何未初始化的变量会导致未定义的行为

修改

OP没有声明数组,而是一个整数指针。