gpt4 book ai didi

c++ - 在不创建新 int[size] 的情况下声明数组时出现 SIGSEGV 错误

转载 作者:行者123 更新时间:2023-11-28 04:14:38 25 4
gpt4 key购买 nike

我尝试编写必须返回指向数组第一个元素的指针的代码。

我试过用这个:-

int *construct(int arr[],int n)
{
int size=(int)(ceil(log2(n)));
size=2*pow(2,size)-1;
int st[size];
for(int i=0;i<size;i++)
st[i]=INT_MAX;
constructUtil(arr,st,0,n-1,0);
int *pt=&st[0];
return pt;
}

这给了我错误。但是当我像这样声明相同的数组时:

int *st=new int[size];

执行成功。

这两者有什么区别?

最佳答案

您不能在 C 语言中返回指向本地数组的指针。您必须使用 malloc 来分配内存并生成指向数组内存区域的指针。现在您可以返回指针并且内存保持有效:

#include <stdio.h>
#include <stdlib.h>

int* construct(int n);

int main()
{
int* ArrayPointer = construct(100);
printf("Address: %p", ArrayPointer);

for(int i = 0; i < 100; i++)
{
printf("%i\n\r", ArrayPointer[i]);
}

free(ArrayPointer);
return 0;
}

int* construct(int n)
{
int* array = (int*)malloc(n * sizeof(int));
for(int i = 0; i < n; i++)
{
array[i] = i;
}

return array;
}

new 指令的作用类似于malloc 函数(不完全相同)。 new 的关键操作是向操作系统请求一些空闲内存用于动态分配(类似于 malloc 但来自另一个内存池)。查看 mallocnew 之间的区别 here .另一种选择(没有动态内存)是声明一个固定大小的静态数组。所以编译器会保留内存,你可以将这个数组的地址传递给你的函数

关于c++ - 在不创建新 int[size] 的情况下声明数组时出现 SIGSEGV 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56945342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com