C++ C+中的指针内存分配+; #包括 #包括 #包括 #包括 使用名称空间std; long NumberHouses=0; 长闭室[2]={0,0}; 长行程时间=0; void gethouse(long long NumH,long long House_X[],long long House_Y[])) { for(长a=0;a>House_X[a]; cin>>House_Y[a]; } } void-SortArray(long-long-NumH,long-long-SortedArray[],long-long-HouseArray[])) { 长插入点=0; 对于(int a=0;a
我想我在C++ C+中的指针内存分配+; #包括 #包括 #包括 #包括 使用名称空间std; long NumberHouses=0; 长闭室[2]={0,0}; 长行程时间=0; void gethouse(long long NumH,long long House_X[],long long House_Y[])) { for(长a=0;a>House_X[a]; cin>>House_Y[a]; } } void-SortArray(long-long-NumH,long-long-SortedArray[],long-long-HouseArray[])) { 长插入点=0; 对于(int a=0;a,c++,C++,我想我在SortArray中至少发现了一个错误: #include <iostream> #include <cmath> #include <limits.h> #include <stdlib.h> using namespace std ; long long NumberHouses = 0 ; long long ClosestHouse[2] = {0,0} ; long long TravelTimes = 0 ; void G
SortArray
中至少发现了一个错误:
#include <iostream>
#include <cmath>
#include <limits.h>
#include <stdlib.h>
using namespace std ;
long long NumberHouses = 0 ;
long long ClosestHouse[2] = {0,0} ;
long long TravelTimes = 0 ;
void GetHouses(long long NumH, long long House_X[], long long House_Y[])
{
for (long long a = 0 ; a < NumH ; a++)
{
cin >> House_X[a] ;
cin >> House_Y[a] ;
}
}
void SortArray(long long NumH, long long SortedArray[], long long HouseArray[])
{
long long InsertPoint = 0 ;
for (int a = 0 ; a < NumH ; a++)
{
SortedArray[a] = LONG_MAX ;
}
for (int a = 0 ; a < NumH ; a++)
{
for (int b = 0 ; b < NumH ; b++)
{
if (HouseArray[a] < SortedArray[b])
{
InsertPoint = b ;
for (int c = NumH ; c > b ; c--)
{
SortedArray[c] = SortedArray[c-1] ;
}
SortedArray[InsertPoint] = HouseArray[a] ;
b = NumH ;
}
}
}
}
void FindMedians(long long NumH, int NumMeds, long long SortedArray[], long long MediansArray[])
{
int MedianNum = 0 ;
long long *Sorted_X = new long long [NumH] ;
long long *Sorted_Y = new long long [NumH] ;
MedianNum = NumH / 2 ;
if (NumMeds == 1)
{
MediansArray[0] = SortedArray[MedianNum] ;
}
else
{
MediansArray[0] = SortedArray[MedianNum] ;
MediansArray[1] = SortedArray[MedianNum + 1] ;
}
}
void FindMidHouse(long long NumH, int NumMeds, long long Cords_X[], long long Cords_Y[], long long Meds_X[], long long Meds_Y[])
{
long long *CloseHouses = new long long [NumH] ;
long long NumPoints = 0 ;
long long LowestMoves = LONG_MAX ;
for (int a = 0 ; a < NumH ; a++)
{
if (abs(Cords_X[a] - Meds_X[0]) > abs(Cords_X[a] - Cords_Y[0]))
{
if (abs(Cords_X[a] - Meds_X[0] <= LowestMoves))
{
LowestMoves = abs(Cords_X[a] - Meds_X[0]) ;
CloseHouses[a] = a ;
NumPoints++ ;
}
}
else
{
if (abs(Cords_Y[a] - Meds_Y[0] <= LowestMoves))
{
LowestMoves = abs(Cords_Y[a] - Meds_Y[0]) ;
CloseHouses[a] = a ;
NumPoints++ ;
}
}
}
long long *CloseHousesSums = new long long [NumH] ;
for (int a = 0 ; a < NumPoints ; a++)
{
for (int b = 0 ; b < NumH ; b++)
{
if ((abs(Cords_X[CloseHouses[a]]) - Cords_X[b]) > (abs(Cords_Y[CloseHouses[a]]) - Cords_Y[b]))
{
CloseHousesSums[a] = CloseHousesSums[a] + abs(Cords_X[CloseHouses[a]] - Cords_X[b]) ;
}
else
{
CloseHousesSums[a] = CloseHousesSums[a] + abs(Cords_Y[CloseHouses[a]] - Cords_Y[b]) ;
}
}
}
for (int a = 0 ; a < (NumPoints - 1) ; a++)
{
if (CloseHousesSums[a] < CloseHousesSums[a+1])
{
ClosestHouse[0] = Cords_X[CloseHouses[a]] ;
ClosestHouse[1] = Cords_Y[CloseHouses[a]] ;
}
}
}
void GetClosestHouse(long long NumH, long long House_X[], long long House_Y[], long long ClosestHouse[])
{
int MedianAmt = 0 ;
long long *Sorted_X = new long long [NumH] ;
long long *Sorted_Y = new long long [NumH] ;
/* long long *Sorted_1 = new long long ;//[NumH] ;
long long *Sorted_a = new long long ;//[NumH] ;
long long *Sorted_b = new long long ;//[NumH] ;
long long *Sorted_c = new long long ;//[NumH] ;
long long *Sorted_d = new long long ;//[NumH] ;
long long *Sorted_e = new long long ;//[NumH] ;
long long *Sorted_f = new long long ;//[NumH] ;*/
SortArray(NumberHouses, Sorted_X, House_X) ;
SortArray(NumberHouses, Sorted_Y, House_Y) ;
for (int a = 0 ; a < NumH ; a++)
{
cout << Sorted_X[a] << "," << Sorted_Y[a] << endl ;
}
if (NumH % 2 == 0)
{
MedianAmt = 1 ;
}
else
{
MedianAmt = 2 ;
}
cout << MedianAmt << endl ;
cout << "sun" ;
long long *Medians_X = new long long [MedianAmt] ;
long long *Medians_Y = new long long [MedianAmt] ;
cout << "shine" << endl ;
FindMedians(NumberHouses, MedianAmt, Sorted_X, Medians_X) ;
FindMedians(NumberHouses, MedianAmt, Sorted_Y, Medians_Y) ;
FindMidHouse(NumberHouses, MedianAmt, House_X, House_Y, Medians_X, Medians_Y) ;
}
void GetHouseDistances(long long NumH, long long House_X[], long long House_Y[], long long ClosestHouse[], long long& TravelTimes)
{
long long Difference_X = 0 ;
long long Difference_Y = 0 ;
for (int a = 0 ; a < NumH ; a++)
{
Difference_X = abs(ClosestHouse[0] - House_X[a]) ;
Difference_Y = abs(ClosestHouse[1] - House_Y[a]) ;
//cout << Difference_X << " - Difference_X" << endl ;
//cout << Difference_Y << " - Difference_Y" << endl ;
if (Difference_X > Difference_Y)
{
TravelTimes = TravelTimes + Difference_X ;
}
else
{
TravelTimes = TravelTimes + Difference_Y ;
}
}
//cout << TravelTimes << endl ;
}
int main()
{
cin >> NumberHouses ;
long long *House_X = new long long [NumberHouses] ; // x coordinate of houses
long long *House_Y = new long long [NumberHouses] ; // y coordinate of houses
GetHouses(NumberHouses, House_X, House_Y) ;
GetClosestHouse(NumberHouses, House_X, House_Y, ClosestHouse) ;
GetHouseDistances(NumberHouses, House_X, House_Y, ClosestHouse, TravelTimes) ;
cout << TravelTimes << endl ;
}
假设SortedArray
的大小为NumH
,则在第一次迭代时,您的写入超出了数组边界。我没有深入研究您的算法,但您的意思可能是int c=NumH-1
抱歉,不能保证它是唯一的一个。当它“崩溃”时会发生什么?你在哪里释放内存?为什么不直接使用向量?什么是
SortArray
以及numberhouse
在哪里定义?顺便说一句,如果你包含标准头stdint.h()您可以得到名为int64\u t
的类型,这样就不必使用凌乱和非标准的long-long
。堆分配会在分配的块旁边保留一些私有信息。我的猜测是:这些信息会被在分配的数组之外写入的SortArray函数损坏。新操作符中的崩溃只是早期操作的结果呃未被发现的错误。
for (int c = NumH ; c > b ; c--)
{
SortedArray[c] = SortedArray[c-1] ;
}