从输入复制第二个和(假设)第三个字符串时,我收到分段错误 . 谁有人解释为什么? IDE(NetBeans)显示的唯一错误是“分配在没有强制转换的情况下从指针生成整数”第8,9,13和14行 . 但第一部分没有指示或分段错误 .

if (response == 'I') {
    char inputName[MAX_LENGTH+1], inputArtist[MAX_LENGTH+1], inputGenre[MAX_LENGTH+1];
    char* songName, artist, genre;
    Node* newNode;
printf("Song name: ");
getStringFromUserInput(inputName, MAX_LENGTH);
songName = (char*)malloc(sizeof(char)*(strlen(inputName)+1));
strcpy (songName, inputName);

printf("Artist: ");
getStringFromUserInput(inputArtist, MAX_LENGTH);
(8) artist = (char*)malloc(sizeof(char)*(strlen(inputArtist)+1));
(9) strcpy (artist, inputArtist);

printf("Genre: ");
getStringFromUserInput(inputGenre, MAX_LENGTH);
(13) genre = (char*)malloc(sizeof(char)*(strlen(inputGenre)+1));
(14) strcpy (genre, inputGenre);

newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
    newNode = createNode (songName, artist, genre, NULL);

    head = insertAtFront (head, newNode);
}
  • getStringFromUserInput是一个返回void并在字符串变量中扫描的函数 .

  • 我知道这个函数可以通过调试正常工作,并使用字符串正确填充inputName / inputArtist / inputGenre .

  • MAX_LENGTH是一个常量int,用作传递给getStringFromUserInput的字符串的最大长度 .

  • inputName,inputArtist和inputGenre是char数组(字符串)

  • songName,artist和genre是char *(指针),用于指向malloc()分配的内存 .

  • 这是特别奇怪的,因为我没有得到第一部分的分段错误,因此NetBeans不会将其识别为错误 .

输出:个人音乐库 .

Commands are I (insert), D (delete), S (search by song name),
P (print), Q (quit).

Command?: I
Song name: A
Artist: A

RUN FINISHED; Segmentation fault; real time: 2m 27s; user: 0ms; system: 0ms