OliV_Ia 2022-01-19 19:26 采纳率: 83.3%
浏览 25
已结题

关于#SIGSEGV#的问题,如何解决?

运行什么都不打印,调试卡在第一个函数。。

#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
#define INCREASEMENT 10


typedef int EType;

typedef struct SqList{
    EType * elem;
    int length;
    int size;
}SqList,*Ptr;

typedef Ptr SqPtr;

//function prototype
int List_Init(SqPtr L);
int List_Retrival(SqPtr L, int post, EType * elem );
int List_Locate(SqPtr L, EType elem, int * post);
int List_Insert(SqPtr L, int post, EType elem);
int List_Delete(SqPtr L, int post);

//funcion definition
int List_Init(SqPtr L)
{
    int status=0;
    L->size = SIZE;
    L->length = 0;
    L->elem = (EType*)malloc(sizeof(EType) * L->size);
    if(L->elem == NULL)
        status = 1;

    return status;
}

int List_Retrival(SqPtr L, int post, EType * elem )
{
    int status = 1;
    if(L){
        if(post >= 1 && post <= L->length){
            *elem = L->elem[post - 1];
            status = 0;
        }
        else status = 2;
    }
    return status;
}

int List_Locate(SqPtr L, EType elem, int * post)
{
    int status = 2, i;
    if(L == NULL)
        status = 1;
    for(i = 0; i < L->length; i++)
    {
        if(elem == L->elem[i]){
            *post = i+1;
            status = 0;
            break;
        }
    }    
    return status;

}


int List_Insert(SqPtr L, int post, EType elem)
{
    int status = 2, i;
    if(post >= 1 && post <= L->length ){
        if(L && L->length <= L->size){
            for(i = L->length-1; i >= post-1; i--){
                L->elem[i+1] =  L->elem[i];
            }
            L->elem[post-1] = elem;
            L->length++;
            status = 0;
        }
    }

    else status = 1;
    return status;
}

int List_Delete(SqPtr L, int post)
{
    int status = 2, i;
    if(post >= 1 && post <= L->length ){
        if(L){
            for(i = post-1;i < L->length-1; i++ ){
                L->elem[i] = L->elem[i+1];
            }
            L->length--;
            status = 0; 
        }
    }

    else status = 1;
    return status;
}

int main()
{
    SqPtr LA, LB, LC;
    int status_A, status_B, status_C;
    int i, j, k = 1;
    status_A = List_Init(LA);
    status_B = List_Init(LB);
    status_C = List_Init(LC);
    printf("%d %d %d",status_A,status_B,status_C);
    List_Insert(LA, 1, 1);
    List_Insert(LA, 2, 3);
    List_Insert(LA, 3, 5);
    List_Insert(LB, 1, 2);
    List_Insert(LB, 2, 4);
    List_Insert(LB, 3, 5);
    List_Insert(LB, 4, 6);

    for(i = 0; i < LA->length; i++){
        for(j = 0; j < LB->length; j++){
            if(LA->elem[i] == LB->elem[j]){
                status_C=List_Insert(LC,k,LA->elem[i]);
                printf("%d\n",status_C);
                k++;
                break;
            }
        }
    }

    for(k = 0; k < LC->length; k++)
        printf("%d ",LC->elem[k]);

    return 0;
    










}

img

  • 写回答

1条回答 默认 最新

  • _GX_ 2022-01-19 19:45
    关注

    LA, LB, LC都是指针,没有分配内存。你可以改为

    int main()
    {
        SqList LA, LB, LC;
        int status_A, status_B, status_C;
        int i, j, k = 1;
        status_A = List_Init(&LA);
        status_B = List_Init(&LB);
        status_C = List_Init(&LC);
        printf("%d %d %d",status_A,status_B,status_C);
        List_Insert(&LA, 1, 1);
        List_Insert(&LA, 2, 3);
        // ...
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月27日
  • 已采纳回答 1月19日
  • 创建了问题 1月19日

悬赏问题

  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)