gpt4 book ai didi

c - 总是出现段错误

转载 作者:行者123 更新时间:2023-11-30 19:26:44 26 4
gpt4 key购买 nike

我必须找到最大的非负子数组,即仅包含非负项的子数组的元素之和应该是最大的。如果2个子数组的和最大,则具有最大的子数组应打印最大长度。如果两个子数组的长度相同,则应选择起始索引较低的子数组。

我将输入数组传递给函数。然后运行一个循环。在该循环中,我首先确保不考虑可能出现在数组开头的负项。然后找到包含的子数组的总和非负项并找到最大和。

void largestsubarr(int* A,int n1,int* len1){
int i=0,j,k=0,count;
A=(int*)malloc(sizeof(int)*n1);
len1=(int*)malloc(sizeof(int)*n1);
int subarr[n1][n1];
int largest=0,max_cnt=0;
while(i<n1){
int sum=0;
count=0;
while(A[i]<0)
i++;
//The first non negative term

while(A[i]>=0)
{
count++;
sum+=A[i];
i++;
}
if(sum>largest)
largest=sum;
}

printf("The largest subarray sum : %d",largest);
free(len1);
}
int main()
{
int n;
printf("Enter the no. of elements : ");
scanf("%d",&n);
int* a=(int*)malloc(sizeof(int)*n);
int* res=(int*)malloc(sizeof(int)*n);
printf("Enter the elements of the array :\n");
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
printf("Address of a : %p",a);
largestsubarr(a,n,res);
free(a);
free(res);
return 0;
}

I am getting segmentation fault.Try to resolve it using gdb.Following is the output I get:

Program received signal SIGSEGV, Segmentation fault.
0x0000555555554a54 in largestsubarr (A=0x555500000000, n1=0,
len1=0x0)
at q2.c:24
24 sum+=A[i];

最佳答案

int subarr[n1][n1];

在堆栈上工作并且可能受到限制。根据 n1 ,您会遇到内存分配错误(如果它完全使用非常量值在本地声明数组)。

也以动态 2D 方式分配 subarr。

typedef int *PInt;
PInt* subarr=new PInt[n1];
for(int i=0;i<n1;i++) subarr[i]=new int[n1];

关于c - 总是出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56687495/

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