橙橙橙橙166 2021-11-04 09:49 采纳率: 85.2%
浏览 50
已结题

c语言显示Runtime Error:Segmentation faul


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
main(){
    int t;
    int n;
    int m;
    int i;
    char c;
    
    int c1;
    int c2;
    char *q[20];
    scanf("%d",&t);
    q[0]=(char*)malloc(500);
    while(t--){
        scanf("%d %d",&n,&m);
        getchar();
        for(i=0;i<n;i++){
            if(i!=0)
            q[i]=(char*)malloc(100);
            if(q[i]==NULL)
                printf("gggg");
            gets(q[i]);
            
            }
        for(i=1;i<=m;i++){
            if(i!=1)
            getchar();
            scanf("%c %d %d",&c,&c1,&c2);
                   
                if(c=='A'){
                    
                strcat(q[c1-1],q[c2-1]);
                
                
                }
            if(c=='C'){
               strcpy(q[c1-1],q[c2-1]);
                
                
                }
            
        }
            printf("%s",q[0]);
            for(i=0;i<n;i++){
                strcpy(q[i],NULL);
                }
    }
    for(i=0;i<n;i++){
                free(q[i]);
                q[i]=NULL;

                }
    }

```oj显示Runtime Error:Segmentation faul为什么
```c


  • 写回答

3条回答 默认 最新

  • 从善若水 5G/6G通信领域优质创作者 2021-11-04 10:06
    关注

    问题一:
    t>=2的 时候 ,malloc了两次,但是第一次的内存没有被释放;有内存泄露

    问题二:
    strcpy、strcat是不安全的函数,可能造成内存溢出,使用strncat、strncpy。
    例如,strcat(q[c1-1],q[c2-1]);
    q[c1-1]长度 99 q[c2-1]长度99
    级联之后 99*2 >100,内存溢出

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月12日
  • 已采纳回答 11月4日
  • 创建了问题 11月4日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度