我要写一段代码(Function),它返回一个指向数组的指针。 但我不知道该怎么做。 我写的代码是:
int* prime_factor(int temp){
int ctr;
int *ret;
int i = 0;
while (temp != 1){
ctr = 2;
if (temp%ctr != 0){
ctr++;
}
else {
*(ret + i) = ctr;
temp /= ctr;
}
}
return ret;
}
我想有必要这样做:
else {
ret = new int[1];
*(ret +i) = ctr;
temp /= ctr;
}
但是如你所知,这些东西的实现需要删除你已经分配的内存,所以我们必须删除函数外的内存,所以它将是非标准函数。 实际上,我想计算一个数字的Prime因子然后将它们退出。 有没有想过这样做?我不知道我该怎么做才能获得目标。 非常感谢你。
答案 0 :(得分:1)
我看到你的问题还有标签C++
所以你可以使用C ++。我真的不知道你的意思是什么没有静态整数...... 。
使用vector。
#include <vector>
vector<int> prime_factor(int number)
{
int ctr = 2;
vector<int> factors;
while (number != 1)
{
if (number % ctr != 0)
ctr++;
else
{
factors.push_back(ctr);
number /= ctr;
}
}
return factors;
}
因为你将使用带整数的向量,它知道如何销毁(“删除”)它自己。
示例:
int main()
{
for (auto &x : prime_factor(20)) // C++11
{
cout << x << endl;
}
}
输出:
2
2
5
答案 1 :(得分:0)
是的,将删除数组的负担放在用户身上是不可取的。在这里你最好使用vector而不是plain array。
您还可以将数组作为参数传递(在调用者中创建,以便在该数组上使用delete更直观)到此函数。
答案 2 :(得分:0)
行*(ret + i) = ctr;
会立即创建内存冲突,因为您的ret
指针没有分配的内存指向。一些内存为它预分配内存,要么在代码中静态(数组声明)CALLING this函数,并将其作为参数传递给函数,要么动态地(使用malloc
或类似)然后在某些内容中释放它点。动态分配可以在函数本身或调用代码中完成。但再次,free
之后的记忆。
答案 3 :(得分:0)
&#34;但是如你所知,这些东西的实现需要删除你已经分配的内存,所以我们必须删除函数外部的内存,因此它将是非标准函数。&#34 ;
为避免这种困境,c ++引入了 Dynamic memory management 支持。
不使用像int*
这样的原始指针,而是使用适当的
std::unique_ptr<int>
(转让所有权)std::shared_ptr<int>
(分享所有权)std::weak_ptr<int>
(分享所有权,但不算作参考)std::auto_ptr<int>
(转让所有权&#34;旧方式&#34; )除此之外,使用 std::vector<int>
似乎比使用简单的int*
更合适。 std::vector<int>
类也旨在让您无法自行获得动态内存管理。
答案 4 :(得分:0)
int *ret;
在您的情况下,ret
并未指向任何内存位置。您正在尝试引用某些未分配的内存位置,这可能会导致分段错误。
只是为了展示如何返回指针并将其释放到下面是示例:
int *some()
{
int *ret = malloc(sizeof(int));
*ret = 10;
return ret;
}
int main()
{
int *p = some();
printf("%d\n",*p);
free(p);
}