Индекс массива является недопустимым для этого массива

Я использую программу mathcad. Я хочу иметь график «sys_r». Пример формы графика ниже

Я пытаюсь программировать ниже.

Но произошла ошибка программирования. ошибка программирования!

Ошибка: «Этот индекс массива недопустим для этого массива».

Я не знаю решения. Пожалуйста, помогите мне.

1 ответ

В вашем цикле for произошла ошибка. j изменяется от 0 до 2 , поэтому j+1 может принимать значение 3 , которое является недопустимым индексом для матрицы (это матрица 3×3, а не 4×4). Следовательно, недопустимая ошибка доступа к «недопустимому индексу».

Ваш внешний цикл for также вызовет ошибку доступа за пределами допустимого диапазона, даже если вы исправите это, потому что i перехожу с 1 на 3 .

Если вы не знали об этом, матрицы (и векторы) в Mathcad индексируются, начиная с 0 , как и в любом другом языке программирования. Таким образом, допустимые индексы для вашей матрицы от 0 до 2 включительно в обоих измерениях.

То, что я пытаюсь сделать, это обратиться к функции, которая в основном представляет собой двумерный массив:

По какой-то причине я получаю следующие ошибки при компиляции:

Что не так в моем коде? Я объявляю g_position как тип массива, поэтому он должен работать.

Решение

g_position объявлен как int* , который допускает только один уровень разыменования, но вместо этого вы пытаетесь выполнить две разыменования. Вам нужно изменить объявление на int** вместо:

Обновить:

int** это не совсем то же самое, что int[][] , Однако, если принять во внимание, что int[4][2] имеет ту же структуру памяти, что и int[8] и вы можете получить доступ к содержимому int[] используя int* , а затем попробуйте это:

Другие решения

Является 0x86b2fdc адрес массива массивов? Или адрес массива указателей на массивы? Или это адрес указателя на что-то?

Читайте также:  Вай фай слабый уровень безопасности

Предполагая, что это адрес массива массивов в 4 дюйма, вы можете просто объявить g_position как указатель на такой:

Ваша основная путаница, кажется, сбивает с толку указатели и массивы, которые не одно и то же:

Массив — это последовательность объектов, расположенных один за другим в памяти. Вы не можете ничего сделать с массивом, кроме как инициализировать его, получить его размер и получить указатель на него или его 0-й элемент

указатель — это адрес, который ссылается на память. Указанная память может содержать один объект соответствующего типа, или он может содержать массив (в этом случае указатель указывает на 0-й элемент массива.

Всякий раз, когда вы ссылаетесь на массив (кроме случаев использования sizeof или унарных &), компилятор молча выдает указатель на 0-й элемент массива, поэтому имя такого указателя в основном взаимозаменяемо с именем массива. Ваш pos_ функции не используют sizeof или же & на g_position поэтому для ваших целей они взаимозаменяемы. вам просто нужно получить правильный тип.

как мне от этого избавиться, вопрос наверно на уровне начальных знаний, но все таки, видимо здесь ты самый продвинутый по маткаду.
Он расчеты считать отказывается

Примечание:
стоило просто получше поискать, надо было точку поставить после переменной.

RPI.su — самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Читайте также:  Как активировать кодовое слово на ozon

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected] . Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.

Оцените статью
Adblock detector