动态数组是在没有malloc的情况下分配的
即使未使用动态数组是在没有malloc的情况下分配的,c,arrays,dynamic,malloc,allocation,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) {
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;
}
#包括
#包括
int main(){
int n,i,*ptr,和=0;
printf(“输入元素数:”);
scanf(“%d”和“&n”);
printf(“输入数组的元素:”);
对于(i=0;i数组不是“创建的”。它是声明的。然后它不是定义或初始化的。您可以使用它
未定义的行为。
如果使用更严格的编译器,则会得到:
warning: ‘ptr’ may be used uninitialized in this function [-Wmaybe-uninitialized]
因此,它实际上不是动态的
在我看来,这里更大的问题是免费(ptr)
:
有可能,但是也是未定义的行为。由于传递了未初始化的指针,指针的值不清楚。它可能是意外的NULL
,但不限于此
大局:
访问任何未初始化的变量会导致未定义的行为
编辑:
OP没有声明数组,而是一个整数指针。如果您在使用指针之前没有malloc
该指针,它可能不会生成运行时错误,因为您引用的无效地址可能恰好位于您的程序可以访问的空间内,而不会生成访问冲突。这并不意味着它是好的。这是正确的仍然是一个错误。您应该打开警告消息。我很欣赏这个答案,这很有趣,您能否进一步说明--“您引用的无效地址可能恰好位于您的程序可以访问的空间内,而不会产生访问冲突”例如,如果地址在堆所在的区域内,则允许应用程序读取或写入内存,但您可能没有使用malloc
@CoolGuy正确分配地址。是的,声明了一个整数指针。但OP将其称为数组,这就是我保留它的原因。我将编辑我的答案以删除任何歧义。好。很好。+1顺便说一句。回答得好。