c - 为什么 unsortedArray 在我的代码运行时会发生变化?
问题描述
我想对给定的unsortedArray
数组进行排序。在此之前,我需要执行以下步骤。但它总是取数字 9,然后重复数字 8
#include<stdio.h>
int main(){
int unsortedArray[] = {9,8,7,6,5,4,3,2,1};
int arr1[9];
int arr2[9];
int arr1Counter = 0;
int arr2Counter = 0;
int i;int n;
for(i=0; i<9; i++){
// n = unsortedArray[i];
int j;
for(j=0; j<9; j++){
if(unsortedArray[j] != unsortedArray[i]){
if(unsortedArray[j] > unsortedArray[i]){
arr2[arr2Counter] = unsortedArray[i];
arr2Counter++;
}else{
arr1[arr1Counter] = unsortedArray[i];
arr1Counter++;
}
}
}
}
int k;
for(k=0; k<9; k++){
printf("%d ", unsortedArray[k]);
}
return 0;
}
解决方案
您有未定义的行为,因为arr2[9]
溢出。在您的嵌套循环中,这部分
arr2[arr2Counter] = unsortedArray[i];
arr2Counter++;
执行 36 次。结果,您的访问权限越界,这会导致未定义的行为。在我的机器上,8 7 6 5 4 3 2 1
打印出来了,但程序随后由于堆栈损坏而崩溃。
考虑程序的逻辑。里面的部分for (j = 0; j < 9; j++) {
一共被执行了72
几次,每次添加一个条目到arr1
or arr2
。它们都可以分别保存10
值,因此它们不能保存所有72
值。
推荐阅读
- vba - 如何在忽略没有数据的字段的同时插入表?
- r - 有条件地向字符串添加字符
- jsf - 使用 widgetvar 后在 JSF+PrimeFaces 中提交表单的问题
- validation - Google 表格中的用户验证
- python - 两个时间戳系列之间的营业时间,不包括周末和节假日
- reactjs - onClick Jest / 酶:方法“模拟”意味着在 1 个节点上运行。找到了 0 个
- python - 如何使用 python 和 selenium webdriver 遍历表并打印前 10 行的结果?
- python-3.x - 如何检查布尔熊猫系列中的所有值是否属于一种类型并根据if条件应用逻辑?
- java - android app下载apk文件并打开(安装)
- go - Golang:用于重新连接 TCP 客户端的递归函数......坏主意?