C随机数生成器返回地址



我的代码的一部分是随机生成一个数字在0到999之间的数组。我用一个随机数生成器来做这个。然而,每次它这样做并返回数组时,intArray[8]intArray[12]都有我假设的地址。我怎样才能解决这个问题。我在randomArr函数中打印了数组的每个部分,它们都很好。

代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<time.h>
#include "sorting.h"

void initRandom()
{
srand(time(NULL));
}
int random(int low, int high)
{
int number = -1;
if(low <= high)
{
number = (rand() % (high-low+1)) + low;
}
return number;
}
void randomArr(int* numArray, int intNum){
int j = 0;
initRandom();
for (j = 0; j < intNum; j++){
numArray[j] = random(0, 999);
}
} 
int main(int argc, char* argv[]){
int* intArray = (int*)malloc(sizeof(double));
if (argc < 2){
printf("Error! Not enough arguments!");
} else if (argc > 3){
printf("Error! Too many arguments!");
} else{
int intNum, i;
if (argc == 2){
printf("Please specify number of integers: ");
scanf("%d", &intNum);
randomArr(intArray, intNum);
}
for (i = 0; i < intNum; i++){
printf("Num %d: %dn", i+1, intArray[i]);
}
}
free(intArray);
return 0;
}

一个包含20个int的输出示例是:

./sorting 1
Please specify number of integers: 20
Num 1: 97
Num 2: 971
Num 3: 579
Num 4: 223
Num 5: 905
Num 6: 883
Num 7: 711
Num 8: 757
Num 9: 544044366
Num 10: 891304505
Num 11: 858863928
Num 12: 842609462
Num 13: 2610
Num 14: 283
Num 15: 568
Num 16: 319
Num 17: 426
Num 18: 443
Num 19: 848
Num 20: 572

int* intArray = (int*)malloc(sizeof(double));正在分配单个sizeof(double)的内存缓冲区(通常为4或8字节)。我将其更改为int* intArray = (int*)malloc(sizeof(int) * intNum);,以malloc您将存储的int数量。为了做到这一点,我将malloc向下移动到if语句中,并将free向上移动到相同的if语句中。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<time.h>

void initRandom()
{
srand(time(NULL));
}
int random(int low, int high)
{
int number = -1;
if (low <= high)
{
number = (rand() % (high - low + 1)) + low;
}
return number;
}
void randomArr(int* numArray, int intNum) {
int j = 0;
initRandom();
for (j = 0; j < intNum; j++) {
numArray[j] = random(0, 999);
}
}
int main(int argc, char* argv[]) {

if (argc < 2) {
printf("Error! Not enough arguments!");
}
else if (argc > 3) {
printf("Error! Too many arguments!");
}
else {
int intNum, i;
if (argc == 2) {
printf("Please specify number of integers: ");
scanf("%d", &intNum);
int* intArray = (int*)malloc(sizeof(int) * intNum);
randomArr(intArray, intNum);
for (i = 0; i < intNum; i++) {
printf("Num %d: %dn", i + 1, intArray[i]);
}
free(intArray);
}
}

return 0;
}

输出:

Please specify number of integers: 20
Num 1: 218
Num 2: 837
Num 3: 797
Num 4: 190
Num 5: 555
Num 6: 644
Num 7: 158
Num 8: 673
Num 9: 837
Num 10: 963
Num 11: 936
Num 12: 101
Num 13: 721
Num 14: 257
Num 15: 541
Num 16: 941
Num 17: 285
Num 18: 958
Num 19: 591
Num 20: 971

最新更新