为什么数组到指针的输出不相关
Why output of array to pointer is not related
int main(){ //main function
MySort sorter;
int* sortedValues;
cout << "Random Numbers\n--------------------------\n";
sorter.assignRandom();
sorter.printData();
return 1;
}
这里是头文件:
class MySort{
private:
int* data;
const int N = 10;
public:
void assignRandom();
void printData();
void printArray(int*);
int* sortAscending();
int* sortDescending();
};
其实现文件:
void MySort::assignRandom(){
int array[N];
for(int a=0;a<N;a++){
array[a] = (rand() %10)+1; //array fill with random numbers 1 to 10 but output is not
}
data=array;
}
void MySort::printData(){
for(int a=0;a<N;a++){
cout<< *(data+a)<<", "; // printing data elements
}
}
输出:
随机数:
2, 0, 1905488, 0, 7339472, 0, 1, 0, 50, 0,
像这样但是我的1到10的随机数哪里有问题?
在这个成员函数中
void MySort::assignRandom(){
int array[N];
for(int a=0;a<N;a++){
array[a] = (rand() %10)+1; //array fill with random numbers 1 to 10 but output is not
}
data=array;
}
您正在将局部数组 array
的第一个元素的地址分配给数据成员 data
。
退出函数后本地数组将不存在。它的内存可以被覆盖。所以指针 data
是一个无效指针。因此,该程序具有未定义的行为。
创建class的数组数据成员或动态分配内存并将其地址分配给数据成员data
。
int main(){ //main function
MySort sorter;
int* sortedValues;
cout << "Random Numbers\n--------------------------\n";
sorter.assignRandom();
sorter.printData();
return 1;
}
这里是头文件:
class MySort{
private:
int* data;
const int N = 10;
public:
void assignRandom();
void printData();
void printArray(int*);
int* sortAscending();
int* sortDescending();
};
其实现文件:
void MySort::assignRandom(){
int array[N];
for(int a=0;a<N;a++){
array[a] = (rand() %10)+1; //array fill with random numbers 1 to 10 but output is not
}
data=array;
}
void MySort::printData(){
for(int a=0;a<N;a++){
cout<< *(data+a)<<", "; // printing data elements
}
}
输出:
随机数:
2, 0, 1905488, 0, 7339472, 0, 1, 0, 50, 0,
像这样但是我的1到10的随机数哪里有问题?
在这个成员函数中
void MySort::assignRandom(){
int array[N];
for(int a=0;a<N;a++){
array[a] = (rand() %10)+1; //array fill with random numbers 1 to 10 but output is not
}
data=array;
}
您正在将局部数组 array
的第一个元素的地址分配给数据成员 data
。
退出函数后本地数组将不存在。它的内存可以被覆盖。所以指针 data
是一个无效指针。因此,该程序具有未定义的行为。
创建class的数组数据成员或动态分配内存并将其地址分配给数据成员data
。