c++ - memcpy 创建段错误

标签 c++ multidimensional-array segmentation-fault 2d memcpy

我有以下代码,它采用未排序的歌曲和艺术家列表并对它们进行排序和显示。

int main()
{
   SongList totalList; // has a public 2d array 'unsortedSongs' variable
   char songs[100][80] =
   {
      {"David Bowie 'Ziggy Stardust'",},
      {"Smokey Robinson 'You've Really Got A Hold On Me'",},
      {"Carole King 'You've Got A Friend'",},
      // many more songs here totaling to 100
      {"Joni Mitchel 'A Case Of You'",},
      {"Prince 'Kiss'"}

   };
   memcpy(&totalList.unsortedSongs, &songs, sizeof(songs)); // this causes a segmentation fault
   totalList.displaySortedList();
   return 0;
}

我几乎直接从示例中提取了 memcpy 的代码 here ,所以我很困惑为什么这不起作用。有人可以帮我解决这个问题吗?

编辑:

这是SongList的初始化

class SongList
{
public:
   char unsortedSongs[100][80];
public:
   void displaySortedList();
   void sortList();
   string rearrange(char[]);
   string getSongsForArtist(int*);
};

最佳答案

这一行:

memcpy(&totalList.unsortedSongs, &songs, sizeof(songs));

应该是:

memcpy(totalList.unsortedSongs, songs, sizeof(songs));

因为 songstotalList.unsortedSongs 都将 decay指向类似于您引用的引用文献中第一个示例的指针:

memcpy ( person.name, myname, strlen(myname)+1 );

关于c++ - memcpy 创建段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17158740/

相关文章:

JavaScript:自动对 Angular 排列变量多维数组

c# - 将值列表分配给 C# 中的结构?

仅限 Eclipse 外部的 C++ 段错误

c - fclose() 期间的段错误

c++ - 使用 printf() 改变多线程结果?

c++ - 在 C++ 中获取 .csv 文件的列数和行数

c# - 是否可以执行存储在变量中的机器代码?

c++ - LINK1104 的 Opencv 构建错误

javascript - 逗号分隔符多维数组

linux - write() 时出现段错误,缓冲区约为 8MB(OSX、Linux)