C++ 函数,返回变量c+;占用的内存位置的大小+;
我正在准备下周的考试,在理解动态内存分配方面遇到了困难。我有一个问题,我不知道如何回答 第4行:int*arr=newint[3] 编写一个包含上述第4行的函数,并返回变量arr占用的内存位置的大小。使用签名: int size_of_variable_star_arr() 我假设我应该同时使用main.cpp和function.cpp-主文件应该包含数组变量,而函数文件应该包含返回它的数组 但是,不确定在这里要做什么才能返回内存位置的大小C++ 函数,返回变量c+;占用的内存位置的大小+;,c++,function,dynamic-memory-allocation,C++,Function,Dynamic Memory Allocation,我正在准备下周的考试,在理解动态内存分配方面遇到了困难。我有一个问题,我不知道如何回答 第4行:int*arr=newint[3] 编写一个包含上述第4行的函数,并返回变量arr占用的内存位置的大小。使用签名: int size_of_variable_star_arr() 我假设我应该同时使用main.cpp和function.cpp-主文件应该包含数组变量,而函数文件应该包含返回它的数组 但是,不确定在这里要做什么才能返回内存位置的大小 //Main.cpp #include <i
//Main.cpp
#include <iostream>
using namespace std;
int main(){
//int *arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
cout << "Array: ";
}
//function.cpp
#include <iostream>
using namespace std;
int size_of_variable_star_arr(){
int *arr = new int[3];
for(int i = 0; i < 4; i++){
cout << arr[i] << " ";
}
return 0;
}
//Main.cpp
#包括
使用名称空间std;
int main(){
//int*arr=新的int[3];
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[3]=4;
cout这是一个非常奇怪的问题,但答案是:
int size_of_variable_star_arr() {
int *arr = new int[3];
delete [] arr;
return sizeof(arr);
}
注:
- 我添加了
delete[]
以撤消(不必要的)new
- 它返回变量
arr
的大小,如问题中所述。不是arr
指向的内存块的大小
Err这是一个非常奇怪的赋值,你确定你被要求编写一个函数来动态分配一个硬编码大小的数组并返回该大小吗?如果是这样,这很简单,只是…奇怪的int foo(int*&bar){const int size=3;bar=new int[size];return size;}
@George Yes我提供的问题正是这个问题。我有点理解你提供的内容……但是它要求我遵循签名,所以我无法使用指针创建foo函数,可以吗?如果你的签名就是提到的签名,你应该删除[]返回前的数组,因为分配的内存将不再指向指针,除非通过全局变量,否则无法将指针传递给调用方。分配将丢失。默认情况下,C++中没有GC。
您应该使用sizeof()
函数。它是内置的,没有任何标题。例如int size=size of(*arr);
将给出int
数据类型的大小。我不知道sizeof方法的存在,感谢您启发我如何使用它。这个主题由几乎不会说英语的人主持,因此这些问题一定很奇怪。非常感谢您的帮助!让我为您解决这个问题:这个主题由几乎不会说英语的人主持知道C++(-))@亚历山大:如果是这样的话,那么他们可能会要求内存块的大小,即<代码> ARR 指向(这将是一个更合乎逻辑的要求)。。在这种情况下,解决方案会有所不同,因此如果您需要本案例的解决方案,请提出一个新问题。@geza无论他们指的是哪一个问题,我认为这里的主要概念是理解delete和sizeof方法,感谢您:)谢谢大家的帮助!@AlexanderMoshos:no问题:)为了确保您完全理解sizeof
,sizeof(arr)
返回指针本身的大小,而不是它指向的内存块的大小。因此,无论在new int[…]上分配多大的数组
,它将返回相同的值:指针的大小,在32位编译中通常为4,在64位编译中为8。