未定义的数组成员不是零! (C)

时间:2014-03-16 14:24:40

标签: c arrays malloc

我的代码是:

int main()
{
    int i,*A,N,menu=0,x;

    printf("\n\n\n   What is the size:   "   );
    scanf("%d",&N);

    A=(int*)malloc(N*sizeof(int));


    printf("\n   enter Array's ");

    for(i=0;i<N;i++){
        printf("\n    %d. element...:   ",i+1);
        scanf("%d",&A[i]);
    }

   for(i=4;i<14;i++){
        printf("\n    %d. element:   ",A[i]);

    }
}

例如我说N代表4并输入元素,然后当我从4到10打印时,有很多随机数。我正在尝试制作二叉树,条件不等于零。我认为其他元素将为零,而循环可以理解数组超出限制。

AM我做错了还是应该使用其他条件?

void add(int x,int * A){
int i=0;

while(A[i]!=NULL){

    if(x<A[i]){
        i=i*2+1;

    }
    else{
        i=i*2+2;

    }
 }
 A[i]=x;
}

2 个答案:

答案 0 :(得分:1)

原因是您正在访问数组越界。使用N = 4,您最多只能访问a[3](因为数组索引从C中的0开始。) 访问未分配的内存位置不一定会为您提供0。它可以包含任何垃圾值。

答案 1 :(得分:0)

你的假设是错误的。

无法保证您不拥有的内存中的内容。您index >= N之后访问的内存以前曾在其他地方使用过。 free()'内存不是零,它仍然包含使用时的内容 - 垃圾!。