【发布时间】:2016-08-20 14:11:02
【问题描述】:
我在下面的代码中运行,我得到的输出是 8 0 4,而不是 8 9 4。你能帮我理解这段代码的问题吗?
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
int *p;
p = (int*)calloc(2, sizeof(int));
*(p + 0) = 8;
*(p + 1) = 9;
p = (int*)realloc(p, 3);
*(p + 2) = 4;
for (int i = 0; i < 3; i++)
cout << p[i] << " ";
free(p);
p = NULL;
}
【问题讨论】:
-
realloc(p,3)-->realloc(p,3*sizeof(int)) -
1) 格式化这个烂摊子! 2)不要垃圾邮件标签。这是 C++,而不是 C。 3) 未定义的行为。实时调频! 4) 不要在 C++ 中使用 C 风格的内存分配。不要在 C++ 中使用 C 风格的编码。如果你想要 C,就写 C 代码! 5) 使用数组表示法,而不是指针算术。不要混淆你的代码。
-
@Olaf:我同意 100%。顺便说一句,
realloc()的 C++ 等价物是什么? -
@chqrlie:我不会用 C++ 编程。但是标准库应该提供一些东西。
-
@chqrlie
std::vector<int>::resize()