对于我的编程项目,我应该编写一个程序来对磁盘上的整数进行排序(即离线排序)。我首先应该生成一些随机整数,写下所有这些整数,并读取其中两个整数进行交换,然后将它们写回磁盘,然后重复这些步骤直到数字排序。我可以很好地生成随机数,并且打开文件没有问题,但是当尝试写入文件时它会崩溃。这是我用来实现排序的程序代码的片段,它包含排序算法,以及崩溃我程序的代码段:
cell.layer.shouldRasterize = true
cell.layer.rasterizationScale = UIScreen.mainScreen().scale
它在代码行finout.write(reinterpret_cast(rand_ints),sizeof(int)* 1)崩溃;在第一个for循环(第52行)中,出现以下错误:ExternalSort.exe中0x55916D16(msvcp140d.dll)抛出异常:0xC0000005:访问冲突读取位置0x00000001。 有没有办法解决这个错误,并使这个排序程序工作?尝试了我可能尝试过的所有内容,但我无法看到一行代码导致程序崩溃或导致其他问题。
答案 0 :(得分:1)
由于rand_ints
的类型为int
,因此您可能需要reinterpret_cast<char *>(&rand_ints)
(请注意&
)。否则,您将使用整数值制作指针。
OTOH,试图将两个相邻的整数读入单个整数变量的地址很可能会导致问题。
更深入地研究排序算法,在我看来,您试图将其概括为任何大小的数据元素,而不仅仅是int
s。但是,它仍然显然是面向阵列的;如果你想处理文件,你可能必须传递文件名或fstream
引用。
此外,除非您需要使用冒泡排序,否则我强烈建议您不要使用它,特别是对于磁盘排序,除非您确保您的数据集非常非常小(例如,不超过百数)。对于就地排序,我建议您使用快速排序。