C++泛型排序类异常求助:类型无关排序功能失效
问题分析与修正方案
你的代码核心问题出在SortAll方法中错误地使用sizeof(ptr)计算数组长度——指针的sizeof结果是指针本身的字节数(如64位系统为8),而非数组元素个数,导致排序范围错误和越界输出。以下是修正后的完整代码:
#include <iostream> #include <bits/stdc++.h> using namespace std; template <typename T> class Array { private: T* ptr; int size; public: Array(T arr[], int s); void SortAll(); void print(); }; template <typename T> Array<T>::Array(T arr[], int s) { ptr = new T[s]; size = s; for (int i = 0; i < size; i++) ptr[i] = arr[i]; } template <typename T> void Array<T>::SortAll() { // 直接使用类中存储的size变量,而非通过指针计算长度 sort(ptr, ptr + size); // 循环条件改为i < size,避免越界访问内存 for (int i = 0; i < size; i++) cout << " " << ptr[i]; cout << endl; } template <typename T> void Array<T>::print() { for (int i = 0; i < size; i++) cout << " " << *(ptr + i); cout << endl; } int main() { int intArr[5] = { 3, 1, 2, 5, 4 }; char charArr[5] = { 'd', 'b', 'a', 'c', 'e' }; Array<int> intTestArray(intArr, 5); intTestArray.print(); intTestArray.SortAll(); Array<char> charTestArray(charArr, 5); charTestArray.print(); charTestArray.SortAll(); return 0; }
关键修正点:
- 替换
sizeof(ptr) / sizeof(ptr[0])为类成员size:指针无法通过sizeof推导数组实际长度,类构造时已经存储了正确的数组大小,直接使用即可。 - 修正输出循环的终止条件:将
i < sizeof(ptr)改为i < size,避免访问数组边界外的内存,消除乱码输出。
修正后运行结果:
3 1 2 5 4 1 2 3 4 5 d b a c e a b c d e
内容的提问来源于stack exchange,提问作者MikaJuhani
相关产品推荐
相关产品推荐

