生成EXC_BAD_ACCESS(代码= 1,地址= 0x30000008)问题

tyky79it  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(219)

我试图创建一个代码来删除数组中的相同元素。问题是EXC_BAD_ACCESS(代码= 1,地址= 0x30000008)问题。当我试图运行我的代码时,它在这里。“

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    srand (time(NULL));
    int i, j, b, c;
    double A[11];
    double B[10];
    char choice;
    for (i = 0; i < 11; i++)
    { 
        A[i] = rand () %100;
    } 
        
    for (j = 0; j < 10; j++)
    {
        B[j] = rand () % 100;
    }

    
    printf("Array A[N]: \n");
        for (i = 0; i < 10; i++)
    {

        printf("%.2lf  ", A[i]);
    }
    printf("\n Array B[M]: \n");
        for (j = 0; j < 10; j++)
    {
        printf("%.2lf  ", B[j]);
    }
    for (i = 0; i < 11; i++)
    {
        for (j = 0; j < 10; i++)
        {
          **  if (A[i]==B[j])
Exception has occurred.
EXC_BAD_ACCESS (code=1, address=0x16fe00000)**
            {
                for (c = j; c < 10; c++)
                {
                    B[c] = B[c+1];
                }
                j--;
            }
        }
    }
    printf("\n New array B[M]: \n");
    for ( j = 0; j < 9; j++)
    {
        printf ("%.2lf", B[c]);
    }
    
    return 0;
}

希望能帮上忙谢谢
我试图定义N11和M10,这样它就能工作了,但不幸的是,没有。

6jygbczu

6jygbczu1#

for (c = j; c < 10; c++){
     B[c] = B[c+1];
}
j--;

在这部分中,如果c = 9(最后一次迭代),则有B[9] = B[10]; B的大小为10,因此索引的最大值必须为9。
我的解决方案如下:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    srand (time(NULL));
    int i, j, b, c;
    double A[11];
    double B[10];
    char choice;
    for (i = 0; i < 11; i++)
    { 
        A[i] = rand () %100;
    } 
        
    for (j = 0; j < 10; j++)
    {
        B[j] = rand () % 100;
    }

    
    printf("Array A[N]: \n");
        for (i = 0; i < 10; i++)
    {

        printf("%.2lf  ", A[i]);
    }
    printf("\n Array B[M]: \n");
        for (j = 0; j < 10; j++)
    {
        printf("%.2lf  ", B[j]);
    }
    int max_j = 10;
    for (i = 0; i < 11; i++)
    {
        for (j = 0; j < max_j; j++)
        {
            if (A[i]==B[j])
            {
                for (c = j; c < max_j-1; c++) {
                    B[c] = B[c+1];
                }
                B[max_j-1] = 0;
                max_j--;
            }
        }
    }
    printf("\n New array B[M]: \n");
    for ( j = 0; j < 9; j++)
    {
        printf ("%.2lf ", B[j]);
    }
    
    return 0;
}

相关问题