【发布时间】:2021-07-11 14:15:10
【问题描述】:
我对 C++ 非常陌生,想问一些关于在 C++ 中分配内存的问题。 抱歉,这似乎是一个基本问题,但下面我有一个使用 malloc 分配的内存地址。 Malloc 使用整数大小的倍数,这将返回一个 void 指针,但随后将其转换为整数指针。如果从技术上讲,它实际上不是指向整数大小的内存区域,而是整数大小的内存的倍数,为什么允许分配给整数?
#include <stdio.h>
#include <stdlib.h>
int main() {
int n = 4, i, *p, s = 0;
p = (int*) malloc(n * sizeof(int));
if(p == NULL) {
printf("\nError! memory not allocated.");
exit(0);
}
printf("\nEnter elements of array : ");
for(i = 0; i < n; ++i) {
scanf("%d", p + i);
s += *(p + i);
}
printf("\nSum : %d", s);
return 0;
}
【问题讨论】:
-
在 C++ 中,没有理由使用
malloc或free,只有new或delete。您确定要学习 C++ 而不是 C,这是一种完全不同的语言吗?你用的是什么教科书,是C还是C++的?而且,如果您真的想学习 C++,那么使用new的理由并不多。现代 C++ 代码几乎从不这样做,而只是使用 C++ 库中为您正确管理所有内存分配的众多容器之一。 -
(1) 从不使用
malloc/free,(2) 几乎从不使用new/delete;对于上面的代码,请使用std::vector<int> my_vector(n);请参阅en.cppreference.com/w/cpp/container/vector 您问题中的代码是纯C(不同的语言)。 -
看来您是从 C 背景进入 C++ 的。在我看来,用 C 的先入之见来学习 C++ 更难。几乎所有好的 C 习惯和编程策略都被认为是 C++ 中的坏习惯或反模式。上面几乎所有的代码都应该是
std::vector<int> p(4);。 -
我没有阅读任何教科书,但我正在阅读有关内存对齐的内容,并提出了一个使用 C++ 作为演示的示例。大约 5 年前我学习了 C++,所以只是回来重新审视 C++ 的部分内容以理解示例
-
@YogiBear 您最好重新标记您的问题
C,就像在 C++ 中一样,这不是推荐的代码/编码风格。你很可能会让所有 C++ 人说“不要那样做”