Memcpy导致分段故障
memcpy creates segmentation fault
我有以下代码,它接受未排序的歌曲和艺术家列表,并对它们进行排序和显示。
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的代码,所以我很困惑为什么它不起作用。有人能帮我修一下吗?
编辑:这是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));
,因为songs
和totalList.unsortedSongs
都将衰减为指针,这与您引用的参考文献中的第一个例子类似:
memcpy ( person.name, myname, strlen(myname)+1 );
http://www.cplusplus.com/reference/cstring/memcpy/
Memcpy期望源变量和目标变量都是指针(void *)
totalList。unsortedSongs是一个指针。
当你写&totalList。unsortedSongs你要求的是指针的地址。有点像"指针指向指针"……在这里看到的:http://www.cplusplus.com/doc/tutorial/pointers/
我刚刚编译了你的代码,它运行良好。
然而,我发现你的初始化列表相当奇怪。当它工作时,它让我认为你实际上想要定义一个char[80]数组的数组,而不仅仅是一个char[80]数组。
所以我认为你的显示例程可能是错误的,你的调试器只是没有显示你真正的行哪里出了问题,因为优化或什么。
相关文章:
- 分段故障(堆芯转储)矢量
- 数组的指针从不分段故障
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 分段故障背包问题
- 分段故障 11,从类函数显示动态 C 字符串
- 面临分段故障 使用 ffmpeg 读取视频时,因为"pFormatCtx-> streams [i]-> codecpar"的地址0x00
- 在C++中,当指向删除和指向不同对象时,分段故障指针
- 对程序故障进行分段
- 分段故障说明
- 分段故障(核心转储)-不知道为什么
- 分段故障线程
- hiredis SET遇到分段故障
- 分段故障,合并排序算法
- 多线程程序中的分段故障和gdb回溯上的不完整信息
- 到达主C++之前分段故障
- 分段故障核心使用 IF流转储
- 使用向量的移动键盘排列(分段故障)
- 在二进制树插入和遍历期间,我得到了分段故障
- 分段故障在类之间返回整数