我有一个创建数组的函数。我要返回的数组。最初,我使用malloc为数组分配空间,但是现在我开始意识到,似乎不需要使用动态内存分配,因为我可以只返回数组的副本。什么时候应该使用动态分配(malloc),什么时候应该坚持使用静态分配?
* int createArray(some parameter, some parameter) {
int n = 0;
while(.....) {
n++;
}
* int newArray = (*int) malloc (sizeof(int) * n);
return newArray;
}
someArray = createArray(parameter, parameter);
编辑:例如,此修改后的代码是否可以替代上述代码?它会按预期工作并返回一个我可以在程序中稍后分配和使用的数组吗?
* int createArray(some parameter, some parameter) {
int n = 0;
while(.....) {
n++;
}
int newArray[n];
return newArray;
}
someArray = createArray(parameter, parameter);
我是大学计算机科学系的新生,在此先感谢您!
答案 0 :(得分:0)
我有一种预感,OP打算询问自动分配而不是静态分配,因为示例代码中未使用static
关键字。从这个角度写这个答案。
如果函数正在返回数组,则需要使用动态内存分配。如果使用自动内存分配,则在退出函数声明后,数组将不复存在。 might still be able to access it是非官方的,但是就C语言而言,被覆盖是一种公平的游戏,并且不可靠也不安全。
通常,您将尽可能使用自动内存分配,因为它是自我管理的(您不能忘记稍后释放它并导致内存泄漏)。此规则的一些例外:
答案 1 :(得分:0)
出于给出的原因,切勿使用-p 15672:15672
。考虑以下代码:
static
如果使用someArray = createArray(parameter, parameter);
someArray2 = createArray(parameter, parameter);
,则这两个都将指向相同的内存,这可能不是您想要的。这样做是有效的C代码,但是大多数编码人员都强烈建议不要这样做。此外,函数的名称以 create 开头,这非常有力地表明您应该使用动态分配。
通常,static
适用于需要在函数中保留数据的情况。永远不要返回指向静态变量的指针。这可能会导致难以跟踪的错误。
一个简单的计数器是一个简单的示例,其中可以使用静态变量。
static
一个更复杂的示例是随机数生成器,您需要在其中保留先前的数字。您可以找到一个示例here.