Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::数组到指针访问冲突错误_C++_C++11 - Fatal编程技术网

C++ std::数组到指针访问冲突错误

C++ std::数组到指针访问冲突错误,c++,c++11,C++,C++11,我试图让我的转置函数接受指针,而不是std::array。我之所以要这样做是因为我可以通过.data()函数传递一个指针或std::array 目前我有以下内容,它使用2D和1D阵列进行就地转换或转换到新阵列。。但是,将下面的代码转换为获取指针会导致内存访问冲突错误 有人能解释一下区别,以及为什么下面的不等于我的指针版本(如下所示): #包括 #包括 模板 无效转置(标准::数组和数据) { 内部宽度=sqrt(尺寸); 对于(int I=1;I

我试图让我的转置函数接受指针,而不是
std::array
。我之所以要这样做是因为我可以通过
.data()
函数传递一个指针或
std::array

目前我有以下内容,它使用2D和1D阵列进行就地转换或转换到新阵列。。但是,将下面的代码转换为获取指针会导致内存访问冲突错误

有人能解释一下区别,以及为什么下面的不等于我的指针版本(如下所示):

#包括
#包括
模板
无效转置(标准::数组和数据)
{
内部宽度=sqrt(尺寸);
对于(int I=1;I
但是,当我使用指针时,转换为以下内容不起作用:S

template<typename T>
void Transpose(T* Data, std::size_t Size)
{
    int Width = sqrt(Size);
    for (int I = 1; I < Width; ++I)
    {
        for (int J = 0; J < I; ++J)
        {
            std::swap(Data[I * Width + J], Data[J * Width + I]);
        }
    }
}

template<typename T>
void Transpose(T** Data, std::size_t Size)
{
    for (int I = 0; I < Size; ++I)
    {
        for (int J = 0; J < I; ++J)
        {
            std::swap(Data[I][J], Data[J][I]);
        }
    }
}
模板
无效转置(T*数据,std::size\u T size)
{
内部宽度=sqrt(尺寸);
对于(int I=1;I

有谁能解释一下这种差异,以及为什么
T**
one不能工作?

二维数组不会退化为双指针。它衰变为
T*[]
。有关说明,请参阅

您必须将故障线路更改为:

void Transpose(T* Data[], std::size_t Size)
或者(因此可以推断长度)

模板
无效转置(T(&Data)[Size1][Size2])

二维数组不会退化为双指针。它衰变为
T*[]
。有关说明,请参阅

您必须将故障线路更改为:

void Transpose(T* Data[], std::size_t Size)
或者(因此可以推断长度)

模板
无效转置(T(&Data)[Size1][Size2])
除了双指针之外,它在什么方面不相等?您是否得到不同的输出、错误?在哪些方面不相等(除了双指针)?您是否得到不同的输出、错误?
template <typename T, std::size_t Size1, std::size_t Size2>
void Transpose(T (&Data)[Size1][Size2])