我在尝试为指针数组输入数据时出现段错误。我对编码很陌生,所以任何帮助都会很棒。我的任务是制作一个指针数组,然后显示,交换它们,然后对它们进行排序。
#include <iostream>
using namespace std;
float getValueFromPointer(float* thePointer)
{
return *thePointer;
}
float* getMinValue(float* a, float* b)
{
if (*a < *b)
{
return a;
}
else
{
return b;
}
}
int main()
{
int arraySize;
cout << "Enter the array size: ";
cin >> arraySize;
float** speed = new float*[arraySize]; // dynamically allocated array
for(int i = 0; i < arraySize; i++)
{
cout << "Enter a float value: ";
cin >> *speed[i];
}
// Core Requirement 2
for (int i = 0; i < arraySize; i++)
{
float value = getValueFromPointer(*speed+i);
cout << "The value of the element " << i << " is: ";
cout << value << endl;
}
//float *pointerToMin = getMinValue(&speed[0], &speed[arraySize - 1]);
//cout << *pointerToMin << endl;
delete [] speed;
speed = NULL;
return 0;
}
您只为外部数组分配了空间,但还需要为每个内部浮点数分配空间。
所以在调用这条线之前:
cin >> *speed[i];
您需要首先为其分配空间:
speed[i] = new float;
您的问题是您已经分配了一个浮点指针数组。 您需要分配一个浮点数组。 因此,目前您没有为实际浮点数分配内存。 如果这样做,您将分配该内存:
float *speed = new float[arraySize];
你不需要我可以看到的 2D/交错数组。 如果您从上面的代码开始,编译器错误应该会引导您朝着正确的方向前进。 (基本上,您将开始从代码中的许多位置删除*
。
编辑根据我误解了您的要求,可能的方法如下。 另一个答案(不是我的答案(在比这更广泛的场景中是有意义的,但希望这是另一个角度来思考你试图解决的那个相当武断的问题:
int main()
{
float *pFloats = new float[10];
float **ppFloats = new float*[10];
//assign float values and pointers to them in same loop
for (int i = 0; i < 10; i++)
{
pFloats[i] = i;
ppFloats[i] = &pFloats[i];
}
//swap two arbitrary pointers
float *pTemp = ppFloats[4];
ppFloats[4] = ppFloats[5];
ppFloats[5] = pTemp;
//print our float array
for (int i = 0; i < 10; i++)
printf("%fn", pFloats[i]);
//print our float array *through* our pointers
for (int i = 0; i < 10; i++)
printf("%fn", *ppFloats[i]);
delete[] ppFloats;
delete[] pFloats;
}
忽略硬编码常量等...这里的重点是,我已经为浮点数创建了一个连续的内存区域,然后在它上面创建了一个浮点指针数组。 请注意,我可以对指针数组进行排序,而对原始数组的影响为零。 有更聪明的方法可以做到这一点,但是...看起来您正在学习原始指针,所以...
与另一个答案形成对比,后者为浮点数创建锯齿状内存(一次 1 个,按需,不一定是连续的(。