我写了一个交叉到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; }
答案 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字符串具有相同的大小。