Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ошибки при работе с динамическим массивом Visual C++

37K
16 марта 2010 года
psyxo
33 / / 26.04.2009
Доброго времени суток! Прошу знающего человека посмотреть мой код. Суть проблемы в том, что компилятор ругается на то, что некоторые переменные не инициализированы. Алгоритм также не работает так, как надо. Матрица у меня квадратная, нужно её транспонировать, без использования другой матрицы. При этом нужно использовать три функции.
Первая функция получает размерность массива, создает динамический массив и возвращает указатель на начало созданного массива.
Вторая – получает адрес массива и его размерность и решает одну из ниже перечисленных задач(транспонирование матрицы).
Третья функция получает адрес массива и его размерность и освобождает память, занятую массивом.
Размерность вводится с клавиатуры в функции main() и передается в первую функцию. Значения элементов вводятся с клавиатуры в первой функции.
В заданиях с нечетным номером использовать функции управления
памятью библиотеки языка С (#include ).
вот сам код
Код:
#include "stdafx.h"
#include "malloc.h"

float **matrix;
int n;
void first(void)
{
float **matrix;
int n;
int i,j;
printf("Enter number of columns & rows:\t\n");
scanf("%d", &n);
matrix = (float**)malloc(n * sizeof(float*));
for(i = 0; i < n; i++)
    matrix = (float*)malloc(n * sizeof(float));
}
void second(void)
{
float **matrix;
int n;
int i, j, tmp;
for(i = 0; i < n; i++)
   for(j = 0; j < n; j++)
        {printf("Enter element of matrix\t");
         printf("%f", matrix[j]);
        }
for( i = 0; i < n; ++i )
         for( j = 0; j < i; ++j )
         {
            tmp = matrix[j];
            matrix[j] = matrix[j];
            matrix[j] = tmp;
         }
for( i = 0; i < n; ++i )
         for( j = 0; j < i; ++j )
             printf("%3d", matrix[j]);
}
void third(void)
{int i;
float **matrix;
for(i = 0; i < n; i++)
    free(matrix);
free(matrix);
}

int _tmain(int argc, _TCHAR* argv[], int n)
{  
    first();
    second();
    third();
    return 0;
}

может кто нибудь помочь с этим? заранее благодарен =)
11
16 марта 2010 года
oxotnik333
2.9K / / 03.08.2007
зачем каждый раз в теле каждой ф-йии определять float **matrix; ?
она уже глобально определена, и каждый раз локальная матрица инициализируется.
37K
16 марта 2010 года
psyxo
33 / / 26.04.2009
спасибо, это я учту :)
11
16 марта 2010 года
oxotnik333
2.9K / / 03.08.2007
Цитата: psyxo

Вторая – получает адрес массива и его размерность и решает одну из ниже перечисленных задач(транспонирование матрицы).


она не получает никаких адресов (судя по коду)

Цитата: psyxo

Третья функция получает адрес массива и его размерность и освобождает память, занятую массивом.


такая же фигня
все ф-ции работают с разными массивами, вторая и третья вообще с неициализированными.

37K
16 марта 2010 года
psyxo
33 / / 26.04.2009
можешь объяснить, как инициализировать массив, и что должно указывать на матрицу? я недавно начал С++ изучать. Благодарен любому совету))
11
16 марта 2010 года
oxotnik333
2.9K / / 03.08.2007
в коде, во всех ф-ях удали строку float **matrix, а в самом начале оставь, и пусть она (эта матрица) будет единственной и глобальной.
37K
16 марта 2010 года
psyxo
33 / / 26.04.2009
спасибо огромное, сейчас так и сделаю, если не получится то отпишу
37K
16 марта 2010 года
psyxo
33 / / 26.04.2009
заработало! теперь всё без ошибок, НО теперь я не могу ввести элементы матрицы, они уже введены. Это может быть из за того, что компилятор ругается на scanf и warning C4101: 'j' : unreferenced local variable?
1.9K
21 марта 2010 года
Rad87
123 / / 14.12.2005
http://msdn.microsoft.com/en-us/library/c733d5h9%28VS.80%29.aspx
по простому переменная не используется.... т.е. компилиятор считает, что она лишняя
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог