gpt4 book ai didi

c - 奇怪的数组错误 C

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:32 25 4
gpt4 key购买 nike

这可能是由于我对 C 语言缺乏了解,但在处理数组时我遇到了一些(我称之为)晦涩的错误:

代码如下:

int * generateRandomArray(int numPageReplacements) {
// Seed random number generator
srand(time(NULL));

int * randPages = (int *)malloc(sizeof(int)*numPageReplacements);

for (int i = 0; i < numPageReplacements; i++) {
randPages[i] = rand() % 10; // generate (with uniform distribution) number 0 - 9
printf("%d ", randPages[i]); // for testing purposes
}
printf("\nRandomPages[3] = %d \n" ,randPages[3]);
return randPages; // return array pointer
}

输出:

7 9 4 6 4 6 5 7 6 3 
RandomPages[3] = 6
Program ended with exit code: 0

如果我背靠背运行它(采用上面生成的随机数),它有时会给出 4(人们所期望的),而在其他时候会给出 6(就像它不知道每个数组单元格的边界一样)。

当我尝试通过调用从该函数获取数组时:

int * ary = generateRandomArray(int numPageReplacements);
printf("Size of ary = %lu",sizeof(ary));

输出:

Size of ary = 8

无论 numPageReplacements 是多少,它都等于 8。

编译器:

Apple LLVM 版本 6.0 (clang-600.0.54)(基于 LLVM 3.5svn)
目标:x86_64-apple-darwin14.0.0
线程模型:posix

我是不是漏掉了什么?

最佳答案

在指针上调用 sizeof 只会得到该指针的大小,这就是 ary 的大小。数组将是 int ary[10];

您正在使用动态分配的内存,而不是数组。当然,它们工作有点像数组,因为您可以使用 [] 访问它的元素,但在幕后,它们是非常不同的野兽。

就像你知道的那样,没有办法找出一个数组有多大,或者即使它根本就是一个数组,而不是仅仅知道单个 int 的地址,那是被传递给一个函数。指针仅存储内存地址。解释该地址的内容取决于程序员。这就是为什么接受数组/缓冲区的 C 函数总是将该数组/缓冲区的大小作为一个单独的参数。

关于c - 奇怪的数组错误 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26988786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com