繁体   English   中英

strcpy在c中给出分段错误

[英]strcpy giving segmentation fault in c

嗨,请帮我

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int classmatesize=0;
char **classmate1;
char **classmate2;    

void checkclassmates(){
        int i,j;
        for(i=0;i<classmatesize;i++){
            for(j=i+1;j<classmatesize;j++){
                if(strcmp(classmate1[i],classmate1[j])==0){
                    strcpy(classmate1[classmatesize],classmate2[i]);
                    strcpy(classmate2[classmatesize],classmate2[j]);
                    classmatesize++;
                }else if(strcmp(classmate1[i],classmate2[j])==0){
                    strcpy(classmate1[classmatesize],classmate2[i]);
                    strcpy(classmate2[classmatesize],classmate1[j]);
                    classmatesize++;                
                }else if(strcmp(classmate2[i],classmate2[j])==0){
                    strcpy(classmate1[classmatesize],classmate1[i]);
                    strcpy(classmate2[classmatesize],classmate1[j]);
                    classmatesize++;
                }else if(strcmp(classmate2[i],classmate1[j])==0){
                    strcpy(classmate1[classmatesize],classmate1[i]);
                    strcpy(classmate2[classmatesize],classmate2[j]);
                    classmatesize++;
                }
            }
        }
    }
int main(void) {
    int i;

    classmate1 = malloc(1000 * sizeof(char*));
    for ( i = 0; i < 1000 ; i++)
    classmate1[i] = malloc((1000) * sizeof(char));

    classmate2 = malloc(1000 * sizeof(char*));
    for ( i = 0; i < 1000 ; i++)
    classmate2[i] = malloc((1000) * sizeof(char));


    yyparse();
    checkclassmates();
    print_the_array();
    return 0;
}

我的yyparse(); 如果我通过注释checkclassmates函数来打印classmate1和classmate2,则其打印和clasematesize将打印为7

classmate1
[ sania  pawan  pandu  haldiram  manas  abhi  prince ]
classmate2
[ sam  pandu  madhur  arjun  jyoti  ash  sam ]

仅当我注释strcpy指令时,prolem才与strcpy配合使用,但仍无法正常工作,这给了分段错误。
我什至尝试了sprintf而不是strcpy,但仍然无法解决。

我的直觉是线条

                classmatesize++;

checkclassmates中是罪魁祸首。 有四个。 由于您要在循环内递增classmatesize ,因此if语句的条件永远不会失败,并且最终您将无法访问数组。

尝试删除这些行,然后查看问题是否仍然存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM