那是我的代码:
#includeint main() { int vet[10], i; for(i=30; i<=45; i++) { scanf("%d", &vet[i]); } for(i=30; i<=45; i++) printf(" %d ", vet[i]); for(i=30; i<=45; i++) printf(" %x", &vet[i]); return 0; }
我在内存中只声明了10个int类型的位置,但是我得到了更多,所以发生了什么?它是内存溢出?
并且类型%x是否正确打印内存地址?
输入是:
1 2 3 4 5 6 7 8 9 10 /*It was to be stoped right here !?*/ 11 12 13 14 15 16
并返回:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /*I put space to indent*/ 22ff6c 22ff70 22ff74 22ff78 22ff7c 22ff80 22ff84 22ff88 22ff8c 22ff90 22ff94 22ff98 22ff9c 22ffa0 22ffa4 22ffa8
NicholasM.. 7
当您访问数组以进行读取或写入时,C语言不会检查边界.程序作者需要确保程序仅访问有效的数组元素.
在这种情况下,您将值写入声明的数组之外的内存地址.虽然SIGSEGV
在这种情况下你有时可能会遇到分段违规(),但你可能只是"幸运" - 真的,不幸 - 并且在运行时没有遇到任何问题.
当您访问数组以进行读取或写入时,C语言不会检查边界.程序作者需要确保程序仅访问有效的数组元素.
在这种情况下,您将值写入声明的数组之外的内存地址.虽然SIGSEGV
在这种情况下你有时可能会遇到分段违规(),但你可能只是"幸运" - 真的,不幸 - 并且在运行时没有遇到任何问题.