错误C2109:下标需要数组或指针类型

时间:2010-12-11 20:08:49

标签: c++ c arrays pointers

#include <stdio.h>
#include <iostream>

using namespace std;

    int main(void)
    {
bool premiereLignefaite = false;
//Lire le fichier
FILE * graphe = fopen("graphe.txt", "r");
//Fichier de sortie
FILE * resultat = fopen("resultat.txt", "w");
int nbr1, nbr2;
int *matrice; //pointeur vers la matrice d'adjacence

//Ligne lue
static char ligne[50];

while (fgets(ligne, 50, graphe) != NULL) //retourne 0 quand on a end-of-file
{
    //La premiere ligne est différente
    if (premiereLignefaite == false) {
        //Initialiser une matrice d'adjacence NxN
        sscanf(ligne, "%d %d", &nbr1, &nbr2);
        matrice =  new int(nbr1 * nbr1); //Memoire dynamique pour la matrice dadjacence n x n
        premiereLignefaite = true;
        continue;
    }
    //On construit notre matrice d'adjacence
    sscanf(ligne, "%d %d", &nbr1, &nbr2);
    matrice[nbr1][nbr2] = 1;
}

int u = 2+2;


return 0;
 }

所以我在这一行上收到错误: matrice [nbr1] [nbr2] = 1; 我只是想从文本文件中构建一个邻接列表。我不明白我做错了什么。谢谢。

编辑:由于人们问起这个问题,这是我的图表文件。第一行是顶点的数量和边的数量(没有用的imo) 以下行是我的边缘,我使用第一行为NxN图形分配内存,并使用以下行填充我的邻接矩阵。

9 20
0 1
0 2
1 0
1 2
1 3
1 5
2 0
2 1
2 3
3 1
3 2
3 4
4 3
5 1
5 6
5 7
6 5
6 8
7 5
8 6

3 个答案:

答案 0 :(得分:2)

int *matrice;表示matrice是指向int(或int)的指针,因此matrice[a]会给你一个int。指针没有关于数组维度的任何信息,因此您无法进行二维访问。

您想要存储数组的尺寸,然后执行

matrice[nbr1 * numberOfColumns + nbr2] = 1;

附注:

  • 如果你不小心边界检查,通过指针进行原始数组访问可能非常危险。考虑std :: vector&lt;&gt;。
  • 你可能意味着new int[nbr1 * nbr2]

答案 1 :(得分:1)

matrice声明为int *,使其成为一个单一维数组。它无法作为多维数组matrice[nbr1][nbr2]进行访问。还要检查内存分配代码。它应该是new int[nbr1 * nbr2],而不是new int(nbr1 * nbr2)

答案 2 :(得分:1)

matrice[x]*(matrice+x)相同,matrice[x][y]*(*(matrice+x)+y)相同。

所以问题在于,当你写matrice[nbr1][nbr2]时,这与写*(*(matrice+nbr1)+nbr2)相同。由于matrice只是一个指针,而不是指针的指针,因此这当然不起作用。