在c中获取分段错误,但为什么?

时间:2018-04-30 05:11:42

标签: c

我写了一个交叉到dna段的函数,如果其中一个是null它应该返回-1如果它们彼此相等则它必须返回-2,否则它必须make crossover但是我采取了分段错误,我的代码有什么问题? a not:ı知道什么是分段错误。

#include <stdio.h>

int crossover(char** dna1, char** dna2, int crossoverIndex)

{
   char *temp;
   int a=0;

   if(dna1==NULL || dna2==NULL)
   {
       return -1;
   }
   if(dna1==dna2)
   {
       return -2;
   }

for(a=0;dna1+crossoverIndex+a;a++)
{
 temp=*(dna1+a+crossoverIndex);
*(dna1+a+crossoverIndex)=*(dna2+a+crossoverIndex);
*(dna2+a+crossoverIndex)=temp;
}
return 0;}
   int main(){
     int i,j;
     char dna1[1][3];
     char dna2[1][3];
     dna1[0][0]='G';
     dna1[0][1]='T';
     dna1[0][2]='T';
     dna1[1][0]='A';
     dna1[1][1]='G';
     dna1[1][2]='T';
     dna2[1][0]='G';
     dna2[1][1]='T';
     dna2[1][2]='T';
     dna2[0][0]='A';
     dna2[0][1]='G';
     dna2[0][2]='T';
     crossover(dna1,dna2,0);
     for(i=0;i<2;i++)
 {
   for(j=0;j<2;j++){
   printf("%c ",dna2[i][j]);
 }
printf("\n");

   }
return 0; }

2 个答案:

答案 0 :(得分:3)

您的数组只有1x3,因此第一个索引的唯一有效值为0,请尝试

 char dna1[2][3];
 char dna2[2][3];

这个循环的继续检查看起来也很可疑:

for (a = 0; dna1 + crossoverIndex + a; a++)

答案 1 :(得分:1)

感谢所有答案和评论:) 我的代码神首先是两个问题; 我应该写

module.exports = (sequelize, DataTypes) => {
  var SubscribedCurrency = sequelize.define('SubscribedCurrency', {
    symbol: {
      type: DataTypes.STRING,
      allowNull: false
    },
    name: {
      type: DataTypes.STRING,
      allowNull: false
    },
    priceAtSubscription: {
      type: DataTypes.STRING,
      allowNull: false
    }
  })
  SubscribedCurrency.associate = (models) => {
    SubscribedCurrency.hasMany(models.User, {
      foreignKey: 'userId',
      onDelete: 'CASCADE'
    })
  }
  return SubscribedCurrency
}

而不是

char dna1[2][3];
char dna2[2][3]; 

但实际上这不是我真正的问题,因为很容易看到; 另一个是交叉功能。 我应该写的

char dna1[1][3];
char dna2[1][3];

而不是

for(a=0;*(dna1+crossoverIndex+a);a++)

停止循环。

不是:在我的问题中,保证两个dna字符串具有相同的大小。