当我运行代码时,指针损坏
主要
#include <iomanip>
#include <iostream>
#include "Bucket.h"
using namespace std;
int main()
{
const int numberCount = 11;
int startingNumbers[numberCount] = { 100, 79, 255, 355, 70, 85, 10, 5, 47, 62, 75 };
cout << "Initial Numbers" << endl;
for (int count = 0; count < numberCount; count++)
{
cout << startingNumbers[count] << " ";
}
cout << endl;
bucketSort(startingNumbers, numberCount);
system("pause");
}
值区
void bucketSort (int startingNumbers[], int numberCount);
Bucket.cpp
#include <iostream>
#include "Bucket.h"
using namespace std;
void bucketSort(int startingNumbers[], int numberCount)
{
const int cols = 10;
const int rows = 11;
int row = 0;
int input = 0;
int *finger[cols];
int table[rows][cols];
for (int count = 0; count < numberCount; count++)
{
row = startingNumbers[count] % 10;
table[row][count] = startingNumbers[count];
finger[count] = &table[row][count];
}
for (int count = 0; count < numberCount; count++)
{
for (int col = 0; col < cols + 1; col++)
{
if (table[count][col] == *finger[col])
{
startingNumbers[input] = *finger[col];
input++;
}
}
}
for (int count = 0; count < numberCount; count++)
{
cout << startingNumbers[count] << endl;
}
}
直到最后,它都不会根据Visual Studio损坏,我使用的指针是否错误?
最佳答案
一个问题在这里:
const int cols = 10;
//...
int *finger[cols];
//...
for (int count = 0; count < numberCount; count++)
{
row = startingNumbers[count] % 10;
table[row][count] = startingNumbers[count];
finger[count] = &table[row][count]; // <---- Issue Here
}
您的
finger
数组被声明为具有cols
个条目,但是使用finger
进行的循环访问count
将会超过cols
值。换句话说,您以一定的大小声明了fingers
数组,但是当您开始使用它进行处理时,就不会尊重fingers
数组的边界。解决方法是确保您永远不会超过
fingers
数组的末尾,或者如果要使fingers
具有numberCount
元素,然后使用std::vector
:#include <vector>
//...
std::vector<int *> fingers(numberCount);
这样,代码将保持不变,并且不会崩溃。结果是否就是您想要的对数字进行排序的结果,这是另一回事了。但是,如果进行这些更改,您的代码将不会崩溃。