Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2018, 18:38   #1
FerrariF70
Пользователь
 
Регистрация: 05.09.2017
Сообщений: 21
По умолчанию Что то с памятью не так

Код:
#include<stdio.h>
#include<stdlib.h>

void create_matrix(int[], int***, int*);
int main()
{
	int VEC1[11] = { 6,4,9,8,9,1,14,56,64,78,-1 };
	int ***matrix = NULL;
	int size = 1;
	create_matrix(VEC1, &matrix, &size);
	free(matrix);
	return 0;
}

void create_matrix(int vec1[], int ***matrix, int *size)
{
	int i = 0, counter = 1, j,buff,counter2 = 0,k=0;
	while (vec1[i++] != -1)counter++; //считывает сколько элементов в VEC1 существует
	i = 0;
	buff = counter;
	while (buff /= 2)(*size)++; //делит counter для выделение памяти под матрицу
	
	if (!(*matrix = (int**)malloc(*size * sizeof(int*) + *size * *size+ sizeof(int)))) //Выделение памяти под двумерный массив
		exit(1);
	matrix[0] = (int*)(matrix + *size);
	for (i = 1;i < *size;i++)
		matrix[i] = matrix[0]+ i * *size;

	for (i = 0;i < *size;i++) {
		for (j = 0;j < *size;j++) {
			if (counter2++ < counter) {
				matrix[i][j] = vec1[k++]; //заносятся сначала элементы с массива VEC1
			}
			else
				matrix[i][j] = -1; //оставшиееся индексы заполняются -1
		}
	}
	for (i = 0;i < *size;i++) {
		for (j = 0;j < *size;j++) {
			printf("%d  ", matrix[i][j]);
		}
		printf("\n");
	}
}
помогите пожалуйста! Visual что то вытворяет не пойму каким образом он это делает впервые вижу такое.
у меня массив VEC1 меняется при выделении памяти и при инициализации matrix. не понимаю что то с памятью не то творится. потому что я пробовал вообще не передавать в функцию массив VEC1 всё равно меняет в чём дело подскажите?

Последний раз редактировалось FerrariF70; 03.06.2018 в 19:03.
FerrariF70 вне форума Ответить с цитированием
Старый 04.06.2018, 05:29   #2
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Да напишите вы уже
Код:
const int VEC1[11] = { 6,4,9,8,9,1,14,56,64,78,-1 };
и смотрите, где будет ругатся компилер и че с этим делать....и вообще слово const лучший друг программиста - не ленитесь.

А еще для особой крутости, чтобы точно-точно было в 1 месте

Код:
const static int VEC1[11] = { 6,4,9,8,9,1,14,56,64,78,-1 };
Эта строка точно верная по логике - т.е. начальные данные, которые не меняются. А дальше компилятор вам надает ошибок, вот из-за них получалось, как получалось, а не как хотели.

Последний раз редактировалось alexzk; 04.06.2018 в 05:33.
alexzk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Картинка в шапке не двигается, что с style.ss не так?или что? Redass HTML и CSS 7 09.11.2016 17:48
Что с динамической памятью? Вероника99 Помощь студентам 1 18.01.2014 23:35
Что с памятью? rip86oz Общие вопросы C/C++ 0 07.08.2010 19:24
Ах, что-то с памятью моей стало (Delphi 7) alxd Помощь студентам 7 22.09.2009 13:15
Что будет с выделенной памятью? Sibedir Общие вопросы Delphi 9 18.01.2008 13:57