我的代码是:
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;
}
答案 0 :(得分:1)
原因是您正在访问数组越界。使用N = 4
,您最多只能访问a[3]
(因为数组索引从C中的0
开始。)
访问未分配的内存位置不一定会为您提供0
。它可以包含任何垃圾值。
答案 1 :(得分:0)
你的假设是错误的。
无法保证您不拥有的内存中的内容。您index >= N
之后访问的内存以前曾在其他地方使用过。 free()
'内存不是零,它仍然包含使用时的内容 - 垃圾!。