9

モデル (char *model) とモデルの年 (int year) を使用して "car" 構造体を定義しました。新しい車の構造体を作成する関数があります。ただし、char ポインタをコピーするときはセグメント フォールトです。これは、リンクされたリストの新しいノードを作成することになっています。

Car *newCar(char *model, int year){
    Car *new = malloc(sizeof(Car));
    new->year = year;
    new->model = malloc(MAX_LENGTH*sizeof(char));
    strcpy(new->model, model);
    new->next = NULL;
    return new;
}
4

4 に答える 4

7

将来の参考のために、この機能は私の問題を修正しました...

Car *createCar(char *model, int year){
    Car *new = malloc(sizeof(Car));
    new->year = year;
    new->model = malloc(strlen(model)+1);
    strcpy(new->model, model);
    new->next = NULL;
    return new;
}
于 2015-11-02T20:41:07.557 に答える
4

これを試すことができます:

new->model = model == NULL ? NULL : strdup(model);

これにより、モデルが NULL の場合にバグが発生するのを防ぐことができます。それ以外の場合は、正確な量のスペースを malloc して strcopy します。さらに、これによりfree(new->model)、すべてのケースで最後に行うことができます。

于 2013-03-11T10:34:41.560 に答える
4

ここであなたのモデルは文字ポインタです。

ただし、strcpy には 2 つの引数が必要ですarraycharacter pointer to which memory allocated by malloc or calloc

ただし、strcpy();受け入れられない文字ポインターとして1つの引数を取ります。

そう作る

new->model = malloc(strlen(model) + 1)strcpy ()そして、それがうまくいくと書いてください。

于 2013-03-11T06:47:33.897 に答える
2

以下のコードを見て、あなたのプログラムと比較してください。あなたのプログラムのどこが間違っているかがわかるはずです。

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

typedef struct car{
char *model;
int year;
}Car;

Car * newCar(char *, int );

int main()
{

Car *benz = newCar("S-class",1990);

printf("\nModel = %s\n",benz->model);
printf("\nYear = %d\n",benz->year);

}

Car * newCar(char *model, int year)
{
    Car *new = malloc(sizeof(Car));
    new->year = year;
    new->model = malloc(strlen(model));
    strcpy(new->model, model);
    return new;
}
于 2013-03-11T06:48:33.193 に答える