【问题标题】:strcpy giving segmentation fault in cstrcpy在c中给出分段错误
【发布时间】:2015-10-29 17:53:06
【问题描述】:

您好,请帮帮我

#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 指令时,问题才与 strcpy 一起使用,它的工作正常,它给出了分段错误。
我什至尝试了 sprintf 而不是 strcpy 仍然无法弄清楚。

【问题讨论】:

  • yyparse 是做什么的?
  • 向我们展示 yyparse();print_the_array();
  • @Michi 因为classmate1 是指向pointers 的指针,而不是指向chars 的指针。
  • @cad 我的错 :)。我没注意到。
  • 如果输入是“a is classmateof b” .yyparse();将 a 添加到 classmate1 并将 b 添加到 classmate2 @cad

标签: c strcpy


【解决方案1】:

我的直觉是线条

                classmatesize++;

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

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

【讨论】:

  • 没有看到 classmatesize 设置的初始值为零以外,我什至看不到这些循环是如何运行的 - i 从零开始,不小于classmatesize 的初始值。缺少代码。
  • 当我将元素添加到数组中时,当时只有我在做同学大小++。所以我只是跟踪数组大小
猜你喜欢
  • 2019-02-23
  • 2020-03-31
  • 2014-10-21
  • 2013-02-23
  • 2016-02-24
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多