我正在尝试创建一个指向函数中6元素的指针int,以便稍后返回它,所以为了这个目的我正在使用malloc,但它似乎并没有像我预期的那样行事.这是代码:
int j = 0;
for (;j < 5; j++) {
int * intBig = malloc(j * sizeof(int));
printf("sizeof intBig - %ld\n", sizeof(intBig));
}
Run Code Online (Sandbox Code Playgroud)
打印与每次迭代时相同的数字8字节sizeof(intBig).而我期待一系列的4, 8, 12, 16.在这个例子中我错过了什么?
Joe*_*oey 10
这是因为你打印的是一个大小int *.这样的指针总是具有相同的大小.sizeof是一个编译器构造.它不能知道仅在运行时发生的事情,例如动态内存分配.它会是什么样的
int intBig[100];
Run Code Online (Sandbox Code Playgroud)
然后你会得到数组的大小(以字节为单位),因为编译器知道它有多大.但是sizeof运算符的结果总是一个编译时常量¹,所以你没有办法产生任何其他东西.
此外,你有一个内存泄漏因为你没有free再次记忆.
¹可变长度数组(VLA)是一个例外,但这里没有使用它们.