我试图通过创建大小相等的数组(由用户的输入确定)并用随机数填充它们来练习我的 C。我遇到了一些问题。首先,我创建和分配数组:
srandom((int)time(NULL)); /* initialize random seed for later use*/
unsigned long arraySize = strtoul(argv[1], NULL, 0);
int *originalArray = malloc(arraySize * sizeof(int));
int *ascendingOrderArray = malloc(arraySize * sizeof(int));
int *descendingOrderArray = malloc(arraySize * sizeof(int));
接下来,我用随机数填充数组的循环:
int i = 0;
int randInt;
/* Seed each array with identical randomly generated numbers */
while(i++ < arraySize){
randInt = (int)random()%100;
*originalArray++ = randInt;
printf("original array assign: %d\n", originalArray);
*ascendingOrderArray++ = originalArray;
printf("ascending array assign: %d\n", ascendingOrderArray);
*descendingOrderArray++ = originalArray;
printf("descending array assign: %d\n", descendingOrderArray);
}
在这里,事情变得很奇怪。我希望每个数组的编号与为每个索引分配给 originalArray 的编号相同。然而,我从printf
声明中得到的输出并没有反映这一点。此外,这些数字很大,但它们都有一个相似的基数,从 2 开始并扩展到许多数字。这应该发生吗?
最后,当我完成所有操作并进行一些无关紧要的打印和格式化时,我尝试释放我的数组:
free(originalArray);
originalArray = NULL;
free(ascendingOrderArray);
ascendingOrderArray = NULL;
free(descendingOrderArray);
descendingOrderArray = NULL;
return 0;
但我遇到了一个pointer being freed was not allocated
错误。
我确定我在这里搞砸了多个级别,但问题是:在哪里?