C函数中的分段错误

C函数中的分段错误,c,arrays,function,memory,C,Arrays,Function,Memory,我希望你度过了美好的圣诞假期。我正在为考试而学习,我的ANSI C项目有问题。我的代码可以工作,但并不总是如此,这很奇怪,因为对于某些输入值,它可以为其他输入值工作。我有两个数组,A和B,它们的大小一定不同,我必须编写一个函数,在另一个数组中对这两个数组进行数学并集。如果有相同值的元素,我只能在新数组中插入一个。我写了所有的代码(我也在这里发布了一个问题,因为我与工会有一些问题),但它并不总是有效。Gcc编译并执行,但它不正确。我用gdb调试过,它说 Program received signa

我希望你度过了美好的圣诞假期。我正在为考试而学习,我的ANSI C项目有问题。我的代码可以工作,但并不总是如此,这很奇怪,因为对于某些输入值,它可以为其他输入值工作。我有两个数组,A和B,它们的大小一定不同,我必须编写一个函数,在另一个数组中对这两个数组进行数学并集。如果有相同值的元素,我只能在新数组中插入一个。我写了所有的代码(我也在这里发布了一个问题,因为我与工会有一些问题),但它并不总是有效。Gcc编译并执行,但它不正确。我用gdb调试过,它说

Program received signal SIGSEGV, Segmentation fault.
0x0000000000400d1c in unionearraycrescente (a=0x7fffffffdd50, indice_m=4, 
b=0x7fff00000005, indice_n=5, minimo=6, indiceMinimo=22)
at array.c:152
152                 if(b[i]==c[j])
这就是问题附近的代码

int arrayun(int a[], int index_m, int b[], int index_n, int minimum, int indexMinimum) 
{

    int i=0;
    int j=0;
    int found; 
    int lenc=0; 
    int c[lenc]; 
    for(i=0;i<index_m;i++){

        found = 0; 
        for(j=0; j<i && !found;j++)
            if(a[i]==c[j])
                found = 1;
        if(!found) 
            c[lenc++] = a[i];
    }
    for(i=0;i<index_n;i++){
        found=0;
        for(j=0;j<i && !found;j++)
            {
            if(b[i]==c[j]) //debug gbd problem - segfault
            found = 1;
            }
        if(!found)
            c[lenc++] = b[i];
    }
intarrayun(inta[],intindex\m,intb[],intindex\n,intminimum,intindexminimum)
{
int i=0;
int j=0;
int-found;
int lenc=0;
int c[lenc];
对于(i=0;i
这是长度为0的数组。在循环中,您试图访问c[1]、c[2]……等等

要解决此问题,可以传递较大数组的长度

int unionearraycrescente (int a[], int index_m, int b[], int index_n,int len, int minimum, int indexMinimum)

and you can then initialize like
int c[len];  
您正在为阵列分配零内存

如果你尝试
b[i]==c[i],其中i>=0意味着它只是一个分段错误

相反,你可以像这样初始化

c[index_m];

int c[lenc];表示在程序中它是c[0]。如果尝试b[i]==c[i],其中i>0表示它只是一个分段错误。我喜欢我编写的代码(我找到了它)所以如果你能帮我的话,请告诉我。
trovato=1;
,你的意思是
found=1;
?@SridharDD那么我该如何修改lenc?是的,我的意思是found=1。我忘了修改。
//在c中无效。
。什么?@伙计,我们不能像这样在ansic中初始化。对吗?是的。它在ansic中无效,但在更新的标准中。你不能你不能在C编程语言中使用它,或者只是用
//在ANSI C中无效
来代替那条注释。为什么有人在向下投票?在这部分代码中,我用index_m更改了所有变量,我没有收到segfault,但在联合之后,我使用选择排序按升序排序,它返回的不是segfaulte正确的值。我将在我的问题中添加问题。为什么更改此c[index_m++]?现在,您正在再次执行相同的操作,使用c[index_m++]初始化,使用c[index_m++]将导致分段错误。将c[index_m++]替换为c[lenc++]希望这可能是问题所在。如果不使用好的调试器来解决问题。我遵循了您的建议。它很有效。谢谢您,您是如此善良。上帝保佑你们所有人。祝您愉快。
int unionearraycrescente (int a[], int index_m, int b[], int index_n,int len, int minimum, int indexMinimum)

and you can then initialize like
int c[len];  
int c[lenc]; means in your program it is c[0] 
c[index_m];