打印数组时出现以下差异:
上次运行的输出,给定数组大小为 10:
1054923524,536171146,1590310503,900411369,764853670,471563977,933417110,1800497411,544592671,135121
1054923524,536171146,1590310503,900411369,764853670,471563977,933417110,1800497411,544592671,0,
知道为什么它打印的是“0”而不是我想的吗? (数组的最后一位)
#include <stdio.h>
#include <stdlib.h>
main() {
srandom(time(NULL));
printf("Size:");
int n;
scanf("%d",&n);
int *ints;
ints=malloc(sizeof(int)*n);
int i;
for(i=1; i<n-1;i++) {
int a=random();
ints[i]=a;
printf("%d,",a);
}
printf("%d\n",ints[n]);
sort(&ints[0],&ints[n]);
free(ints);
}
void sort(int *begin, int *end) {
int i;
for(i=0;&(begin[i])!=end;i++) {
printf("%d,",begin[i]);
}
}
最佳答案
您从未将任何内容存储到数组 ints[n-1]
的最后一个元素中.您打印了错误的数组最后一个元素,这会调用未定义的行为,因为您读取的内容超出了分配的内存区域的末尾。
更改初始化循环以初始化所有成员,方法是循环 while i < n
.删除你的 printf()
在循环之后,而是只打印一个换行符。
for(i=0;i<n;i++) {
int a=random();
ints[i]=a;
printf("%d,",a);
}
putchar('\n');
关于c - 在 C 中给定开始和结束内存地址的意外行为遍历数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18194084/