Error subscripted value is neither array nor pointer nor vector

List of the most common C errors students experience in Mimir Classroom and their explanations

Here is the list of the most common C errors we have seen students experience in Mimir Classroom. The list of errors will continue to grow as we learn from students’ work and as we hear from instructors like you send recommendations.

control reaches end of non-void function [-Werror=return-type]

This typically indicates that one of your functions was declared to have a return type (non-void function) but it is not returning a value. Check that every non-void function returns the expected value.

ld returned 1 exit status

This typically means that you have variables not defined and the most common cause are typos and spelling mistakes. Check for spelling differences.

stray ‘342’ in program

This means that one of your double quotation marks are invalid Unicode characters. C and C++ don’t allow «smart» quotes (i.e. ” vs «). This usually happens when you copy and paste code from other sources or use a text editor that uses Unicode. To fix these error just replace the Unicode quotation marks using your keyboard.

expected ‘;’ before ‘}’ token

This is typically a syntax error. Make sure that for every opening parentheses or bracket there is a matching closing one and that every statement ends with a semi-colon.
You can read more about semi-colons and statements here: http://www.cplusplus.com/doc/tutorial/control/

subscripted value is neither array nor pointer nor vector

This error refers to your use of the subscript operator to access values in an array, pointer of vector. For example, you’ve declared a single-dimensional array but you’re trying access it as a two-dimensional:

int newArray[4];
newArray[4][4] = …;

no input files

This means the file that the compiler is trying to compile doesn’t exist. Make sure the file you’re calling exists in the directory you’re in and that the extensions are either «.c» or «.h».

expected declaration or statement at end of input

This is typically a syntax error. Make sure that for every opening parentheses or bracket there is a matching closing one and that every statement ends with a semi-colon.

You can read more about semi-colons and statements here: http://www.cplusplus.com/doc/tutorial/control/

suggest parentheses around ‘&&’ within ‘||’ [-Werror=parentheses]

This error is an indication that your if-else conditional statements are missing parentheses. You can read more about if-else statement syntax here: http://www.cplusplus.com/doc/tutorial/control/

unknown type name ‘bool’

Some older versions of C don’t allow ‘bool’ as variable types. If you believe your version of C allows it, make sure you’re importing the correct libraries. You can read more about using boolean variables in C here: https://en.cppreference.com/w/c/types/boolean

statement with no effect [-Werror=unused-value]

This can happen due to a multitude of reasons, the most common stems from missing characters that make the statement invalid, i.e., you may have a line of code that doesn’t do anything due to a missing character, operator, or parentheses. For example:

int x = 0;
int y = 2;
x == y;

The last line is comparing two variables but the result of the comparison (true or false) is not being used. 

expected identifier or ‘(’ before ‘}’ token

This typically means that the placement of your parentheses and curly brackets is incorrect. Make sure you’re using the correct syntax, that your statements end with a semi-colon, and that for every opening parentheses and curly bracket has a closing one.

Read more about C syntax here: http://www.cplusplus.com/doc/tutorial/control/

too many arguments for format [-Werror=format-extra-args]

Typically this refers to the amount and type of arguments passed into a function do not match the expected amount and types in the function declaration.

You can read more about function arguments and syntax here: http://www.cplusplus.com/doc/tutorial/functions/

stray ‘\222’ in program 

This usually happens when you copy and paste code from other sources or use a text editor that uses Unicode. To fix these error just replace the Unicode quotation marks or white spaces using your keyboard.

stray ‘\210’ in program

This usually happens when you copy and paste code from other sources or use a text editor that uses Unicode. To fix these error just replace the Unicode quotation marks or white spaces using your keyboard.

XChr

0 / 0 / 1

Регистрация: 13.11.2013

Сообщений: 84

1

14.05.2015, 05:16. Показов 19577. Ответов 9

Метки нет (Все метки)


Есть 2 массива:

C
1
2
3
4
5
6
7
8
9
10
11
12
int **tmp3;
  tmp3 =  ( int  **) malloc(sizeof(int*)*n);
    for  (i=0; i<n; i++)
    {
        tmp3[i]=(int*)malloc(sizeof(int)*m);
    }
 
   a =  ( int  **) malloc(sizeof(int*)*n);
    for  (i=0; i<n; i++)
    {
        a[i]=(int*)malloc(sizeof(int)*m);
    }

При попытке присвоить значение

C
1
tmp3[i][j]=a[i][j]

Выскакивает ошибка:subscripted value is neither array nor pointer nor vector. Как исправить?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



6044 / 2159 / 753

Регистрация: 10.12.2010

Сообщений: 6,007

Записей в блоге: 3

14.05.2015, 08:25

2

Переменная а как объявлена?



0



XChr

0 / 0 / 1

Регистрация: 13.11.2013

Сообщений: 84

14.05.2015, 10:06

 [ТС]

3

Как

C
1
int a**



0



HighPredator

6044 / 2159 / 753

Регистрация: 10.12.2010

Сообщений: 6,007

Записей в блоге: 3

14.05.2015, 10:30

4

XChr, в смысле

C
1
int **a;

?



0



XChr

0 / 0 / 1

Регистрация: 13.11.2013

Сообщений: 84

14.05.2015, 10:35

 [ТС]

5

Да, так. Т.е. всё вместе выглядит вот так:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int **a;
int **tmp3;
a =  ( int  **) malloc(sizeof(int*)*n);
    for  (i=0; i<n; i++)
    {
        a[i]=(int*)malloc(sizeof(int)*m);
    }
 
int **tmp3;
  tmp3 =  ( int  **) malloc(sizeof(int*)*n);
    for  (i=0; i<n; i++)
    {
        tmp3[i]=(int*)malloc(sizeof(int)*1);
    }
 
 for (i=0; i<n; i++) // Заполнение массива a
        {
            for (j=0; j<m; j++)
            {
                a[i][j]=(-50+rand()%100);
            }
        }
       
for (i=0;i<n;i++)
       tmp3[i][0]=a[i][0];

И при попытке присвоения какого-либо элемента tmp3[i][0] к a[i][0] выходит сообщение об ошибке



0



6044 / 2159 / 753

Регистрация: 10.12.2010

Сообщений: 6,007

Записей в блоге: 3

14.05.2015, 11:29

6

У меня приведенный вами код компилится и отрабатывает нормально (если убрать строку 9).

Добавлено через 28 секунд
З.Ы. ну и добавить там i,j,m,n



0



XChr

0 / 0 / 1

Регистрация: 13.11.2013

Сообщений: 84

14.05.2015, 11:54

 [ТС]

7

Значит, дело в стройке

C
1
printf ("nЮ:%d",tmp[i][1]);

, которая находится в цикле

C
1
for (i=0;i<n;i++) {  tmp3[i][0]=a[i][0]; printf ("nЮ:%d",tmp[i][1]); }

Я просто даже не подозревал, что дело в ней, и поэтому не стал копировать в код



0



6044 / 2159 / 753

Регистрация: 10.12.2010

Сообщений: 6,007

Записей в блоге: 3

14.05.2015, 12:02

8

И кто у нас tmp?



0



XChr

0 / 0 / 1

Регистрация: 13.11.2013

Сообщений: 84

14.05.2015, 13:59

 [ТС]

9

Вот где оказывается ошибка была, спасибо) Но теперь программа вылетает при попытке печати
Залью сюда весь код программы:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <math.h>
 
int main()
{
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    printf ("n Характеристикой столбца целочисленной матрицы назовем сумму модулей егоn отрицательных нечётных элементов. Переставляя столбцы заданной n матрицы, расположить их в соответствии с ростом характеристик.nn");
    int **a;
    int i, j, f, n, m;
    printf("nt Введите количество строк: ");
    scanf("%d", &n);
    printf("nt Введите количество столбцов: ");
    scanf("%d", &m);
    int sumk[m],por[m];
    for (i=0; i<m; i++)
    {
        sumk[i]=0;
        por[i]=i;
        printf ("%d",por[i]);
    }
 
    a =  ( int  **) malloc(sizeof(int*)*n);
    for  (i=0; i<n; i++)
    {
        a[i]=(int*)malloc(sizeof(int)*m);
    }
 
 
    printf ("nt Введите 1, чтобы самостоятельно заполнить матрицу.n");
    printf ("nt Введите 0, чтобы заполнить матрицу случайными числами.n ");
 
    scanf ("%d",&f);
 
    if (f==1) // Заполнение матрицы в ручную
    {
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < m; j++)
            {
                printf("nЭлемент [%d][%d] = ", i+1, j+1);
                scanf("%d", *(a+i)+j);
            }
        }
    }
    if (f==0) // Хаполнение матрицы рандомными числами
    {
 
        for (i=0; i<n; i++)
        {
            for (j=0; j<m; j++)
            {
                a[i][j]=(-50+rand()%100);
            }
        }
    }
 
    printf ("n Составленная матрица: nn");
    for (i = 0; i < n; i ++)
    {
        for (j = 0; j < m; j ++)
        {
            printf("%4d", *(*(a+i)+j) );
        }
        printf("n");
    }
 
// Суммирование абсолюьютных значений нечётный отрицательных чисел по столбцам
    j=0;
    while (j<m)
    {
        for (i=0; i<n; i++)
        {
            if (a[i][j]<0 && a[i][j]%2!=0) sumk[j]=sumk[j]+abs(a[i][j]);
        }
        j++;
    }
 
    for (i=0; i<m; i++) printf ("n sumk[%d]=%d",i,sumk[i]);
 
// Сортировка массива индексов и массива сумм по возрастанию
 
 
    int tmp,tmp2;
    for (i=0; i<m-1; i++)
    {
        for (j=i+1; j<m; j++)
        {
            if (sumk[i]>sumk[j])
            {
                tmp=sumk[i];
                tmp2=por[i];
                sumk[i]=sumk[j];
                por[i]=por[j];
                sumk[j]=tmp;
                por[j]=tmp2;
            }
        }
    }
 
for (i=0;i<m;i++) printf ("n%d и %d",sumk[i],por[i]);
 
int **tmp3;
  tmp3 =  ( int  **) malloc(sizeof(int*)*n);
    for  (i=0; i<n; i++)
    {
        tmp3[i]=(int*)malloc(sizeof(int)*n);
    }
 
 for (i=0;i<n;i++)
       tmp3[i][0]=a[i][0];
        printf ("n:%d",tmp3[i][0]);
 
 
    return 0;
}



0



DrOffset

16631 / 8989 / 2205

Регистрация: 30.01.2014

Сообщений: 15,611

14.05.2015, 14:51

10

XChr, цикл в 113 строке. Скобки нужны ему. Следующая за циклом операция выполняется в теле цикла, а вот printf уже вне его.

C
1
2
3
4
5
    for (i = 0; i < n; i++)
    {
        tmp3[i][0] = a[i][0];
        printf ("n:%d", tmp3[i][0]);
    }



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

14.05.2015, 14:51

10

I am writing a algorithm to solve Sudoku puzzles but my code is producing a number of errors and i cant seem to find what is going on

The errors the code returns is

error: subscripted value is neither array nor pointer nor vector
   69 |         row, col = find_empty_box(grid[9][9], grid, guess, row, col);
warning: passing argument 2 of ‘find_empty_box’ makes pointer from integer without a cast [-Wint-conversion]
   69 |         row, col = find_empty_box(grid[9][9], grid, guess, row, col);
note: expected ‘int *’ but argument is of type ‘int’
    6 | bool find_empty_box(int grid[9][9], int *row, int *col)
warning: passing argument 3 of ‘find_empty_box’ makes pointer from integer without a cast [-Wint-conversion]
   69 |         row, col = find_empty_box(grid[9][9], grid, guess, row, col);
note: expected ‘int *’ but argument is of type ‘int’
    6 | bool find_empty_box(int grid[9][9], int *row, int *col)
note: expected ‘int *’ but argument is of type ‘int’
    6 | bool find_empty_box(int grid[9][9], int *row, int *col)
note: declared here
    6 | bool find_empty_box(int grid[9][9], int *row, int *col)

The code is

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>


bool find_empty_box(int grid[9][9], int *row, int *col)
{
    for (int x = 0; x <= 9; ++x)
    {
        for (int y = 0; y < 9; ++y)
        {
            if (grid[x][y] == 0)
            {
                *row = x;
                *col = y;
                return true;
            }
        }
    }
    return false;
}

int Answer_Valid(int grid, int guess, int row, int col)
{
	int row_values = grid[&row];

	for (int i = 0; i < grid[&row]; ++i)
	{
		if (guess == grid[&row[&i]])
		{
			return false;
		}
	}

	int column_values = grid[&col];

	for (int t = 0; t <= 9; ++t)
	{
		for (int n = 0; n < grid[&col]; ++n)
		{
			if (&guess == &grid[&col[&n]])
			{
				return false;
			}
		}
	}

	int row_start = (row / 3) * 3;
	int col_start = (col / 3) * 3;

	for (int x = 0; x <= row_start && row_start + 3; ++x)
	{
		for (int y = 0; y < col_start && col_start + 3; ++y)
		{
			if (grid[&x][&y] == guess)
			{
				return false;
			}
			return true;
		}
	}

}


int Solver(int grid, int guess, int row, int col)
{
	
	row, col = find_empty_box(grid[9][9], grid, guess, row, col);

	if (&row == false)
	{
		return true;
	}

	for (int i = 0; (i < 1)||(i < 2)||(i < 3)||(i < 4)||(i < 5)||(i < 6)||(i < 7)||(i < 8)||(i < 9); ++i)
	{
		if(Answer_Valid(grid, guess, row, col))
		{
			grid[&row][&col] = guess;

			if(Solver(grid, guess, row, col))
			{
				return true;
			}
			return false;
		}
	}

	int LineNum = 9;
	int RowAmount = 9;

	for (int i = 0; i < LineNum; ++i)
	{
		for (int t = 0; t < RowAmount; ++t)
		{
			printf("%d ", grid[&i][&t]);
		}

		printf("n");	
	}
}

int main()
{
	int grid[9][9] = 
	{
		{8,0,0,0,0,0,0,0,0},
		{0,0,3,6,0,0,0,0,0},
		{0,7,0,0,9,0,2,0,0},
		{0,5,0,0,0,7,0,0,0},
		{0,0,0,0,4,5,7,0,0},
		{0,0,0,1,0,0,0,3,0},
		{0,0,1,0,0,0,0,6,8},  
		{0,0,8,5,0,0,0,1,0},
		{0,9,0,0,0,0,4,0,0}
	};

	int LineNum = 9;
	int RowAmount = 9;

	for (int i = 0; i < LineNum; ++i)
	{
		for (int x = 0; x < RowAmount; ++x)
		{
			printf("%d ", &grid[i][x]);
		}

		printf("n");	
	}
}

Понравилась статья? Поделить с друзьями:
  • Error static assertion failed invalid pin specified
  • Error starting client server protocol code 5
  • Error src refspec master does not match any error failed to push some refs to
  • Error src refspec main ничему не соответствует
  • Error src refspec main does not match any что это