数组下标的无效类型'int [int]'

时间:2015-03-08 12:52:10

标签: c++ arrays

请尽快帮助我。我正在做一个特殊的程序,但是我不能完全理解指针在这里表现的确切方式。帮我解决这个错误:

  

错误:数组下标的类型'int [int]'无效   if((friendsOnPhoto [j] [1]> tempH)&&(& friendsOnPhoto [j] [1]!=& friendsAmount [i] [1]))

代码是:

#include <iostream>

using namespace std;

int main() {

int friendsAmount;
int i=0, j=0;
int tempW=0;
int tempH=0;
cin>>friendsAmount;
int** friendsOnPhoto = new int* [friendsAmount];

for (i=0;i<2;i++)
*friendsOnPhoto = new int [i];

for (i=0;i<friendsAmount;i++)
{
cin>>friendsOnPhoto[i][0];
tempW += friendsOnPhoto[i][0];
cin>>friendsOnPhoto[i][1];
}

for (int i=0;i<friendsAmount;i++){ 
for (int j=0;j<friendsAmount;j++){
if((*friendsOnPhoto[j][1]>tempH) && (*friendsOnPhoto[j][1]!=*friendsAmount[i][1]))
tempH = friendsOnPhoto[i][1];
}
}
cout<<(tempW-friendsOnPhoto[i][0])*tempH;

}

2 个答案:

答案 0 :(得分:0)

首先,摆脱

中的所有*
if((*friendsOnPhoto[j][1]>tempH) && (*friendsOnPhoto[j][1]!=*friendsAmount[i][1]))

这些不是指针,而是简单的int元素。

其次,

(*friendsOnPhoto[j][1] != *friendsAmount[i][1])
                           ^^^^^^^^^^^^^^^^^^^^ 

这是错误的,因为您已将friendsAmount声明为

int friendsAmount;

因此,您的代码应为:

if((friendsOnPhoto[j][1]>tempH) && (friendsOnPhoto[j][1]!=friendsAmount))

答案 1 :(得分:0)

声明

*friendsOnPhoto = new int [i];

覆盖同一位置friendsOnPhoto[0]int元素的数量也因环路索引而异,首先分配元素,然后分配下一个迭代。然后你的循环就结束了。

由于您只初始化friendsOnPhoto[0],因此任何其他索引都将使用未初始化的内存并导致undefined behavior

我相信你一定是这么说的。

for (i=0;i<friendsAmount;i++)
    friendsOnPhoto[i] = new int [2];