我在尝试为指针数组输入数据时遇到段错误。我对编码很新,所以任何帮助都会很棒。我的任务是制作一个指针数组然后显示,交换它们而不是排序它们
#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;
}
答案 0 :(得分:4)
您只为外部阵列分配了空间,但您还需要为每个内部浮动分配空间。
所以在调用此行之前:
cin >> *speed[i];
您需要先为其分配空间:
speed[i] = new float;
答案 1 :(得分:1)
您的问题是您已经分配了一系列浮点指针。您需要分配一个浮点数组。所以目前你没有为实际花车分配内存。如果你这样做,你将分配那个记忆:
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("%f\n", pFloats[i]);
//print our float array *through* our pointers
for (int i = 0; i < 10; i++)
printf("%f\n", *ppFloats[i]);
delete[] ppFloats;
delete[] pFloats;
}
忽略硬编码的常量等......这里的要点是我为浮点数创建了一个连续的内存区域,然后在它上面创建了一个浮点指针数组。请注意,我可以对指针数组进行排序,对原始数组没有任何影响。有很多更聪明的方法可以做到这一点,但是......看起来你正在学习原始指针,所以......
与另一个为浮点数创建锯齿状内存的答案(一次一个,按需提供,不一定是连续的)对比。