#include <stdio.h>
#include <stdlib.h>
int main(){
int *ptr;
ptr=(int*)calloc(4,sizeof(int));
for(int i=0;i<5;i++){
printf("Enter the %d value:",i+1);
scanf("%d",&ptr[i]);
}
printf("\n Elements in allocated memory\n\n");
for(int i=0;i<5;i++){
printf("The %d element is: %d\n",i+1,ptr[i]);
}
free(ptr);
return 0;
}
输出:
Enter the 1 value:1
Enter the 2 value:2
Enter the 3 value:3
Enter the 4 value:4
Enter the 5 value:5
Elements in allocated memory
The 1 element is: 1
The 2 element is: 2
The 3 element is: 3
The 4 element is: 4
The 5 element is: 5
Process returned 0 (0x0) execution time : 5.662 s
2条答案
按热度按时间new9mtju1#
你去一家商店,买了六块糖,告诉收银员你有五块糖,付了五块钱,然后离开。
这个故事是不是暗示人们可以拿六块糖,而只付五块的钱?不,不是。
没有人能保证每一个入店行窃的人都会被抓住。这种没有保证的情况并不构成对入店行窃的认可,也不是保证没有入店行窃的人会被抓住。
当你违反C语言规则时,语言并不总是保证你会被抓住。这种没有保证的情况并不是对违反规则的认可,也不是对你永远不会被抓住的承诺。
你的第六个数组元素是商店里偷来的糖果。你 * 这次 * 没有被抓住。这并不意味着你下次不会被抓住,或者在你最不希望的时候。
Live demo。
对于这种缺乏保证的情况,有一个技术术语(或者C语言的行话)叫做undefined behavior,任何C程序员都必须熟悉它。
blmhpbnm2#
for循环的范围是0-5,这意味着你要访问6个地址(0,1,2,3,4,5),但你只动态分配了5个。因此,将循环的范围从0-5改为0-4就可以了。另外,你必须在程序结束时释放动态分配的内存。
输出: