【发布时间】:2017-08-18 22:16:15
【问题描述】:
我可以执行此代码而不会出错。所以我相信 C++ 允许这样做。 例如:
char *foo (char *start, int n) {
static char* temp; //Does this have any significance?
temp = new char[n];
for (int j=0; j<n; j++)
temp[(n-1)-j]=start[j];
return temp;
}
int main(){
char *c;
char a[6]={'1','2','3','4','5','\0'};
c = a;
int n = sizeof(a);
c = foo(c,n);
delete []c; //Does this delete the static array created in foo()?
return 0;
}
P.S.- 我知道有一种更好的反转数组的方法,但 Q 并不专注于此。我只是想不出更好的例子。:)
编辑:我知道 temp 是在堆中创建的,我不需要使用 static。但是变量声明中的静态关键字在内存映射等中创建动态数组时有什么不同吗?
【问题讨论】:
-
是的,
delete []c;删除了在foo中分配的数组。您的代码几乎没有意义,但这部分是正确的。 -
为什么这个变量是静态的?
-
原代码和现在的代码没有本质区别。这仍然没有什么意义,但
delete []c;部分仍然是正确的。 -
new创建的数组不是本地的。 -
“动态创建的静态”是一个自相矛盾的术语。
标签: c++ arrays static dynamic-memory-allocation