Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
zasadadada
-27 / 8 / 1
Регистрация: 03.05.2013
Сообщений: 482
#1

Выделение памяти malloc приводит к неправильным расчетам - C++

01.07.2014, 21:47. Просмотров 324. Ответов 9
Метки нет (Все метки)

Есть функция которая постоянно вызывается для расчетов.
Она работает правильно, до тех пор пока я в неё не добовляю очередную строчку выделения памяти malloc,
после чего все результаты расчетов вообще другие.
C++
1
2
3
4
5
void test () {
    double* buff = (double*)::malloc( w_size *sizeof(double) * size_1);
    double* buff2 = (double*)::malloc( w_size *sizeof(double) * size_1);  добавил перестало считать верно
 
};
в чем может быть причина? Очистки памяти я не делаю, функция открывается - закрывается много много раз.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2014, 21:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделение памяти malloc приводит к неправильным расчетам (C++):

Выделение памяти malloc - C++
не работает пример из лекции , там пример на доске такой написан - #include <stdlib.h> int main() { int...

Выделение памяти с использованием malloc - C++
Доброго времени суток :) В общем есть следующий класс: class Addres { char name; char street; char city; char state; ...

Динамическое выделение памяти malloc() - C++
Здравствуйте! Cкажите пожалуйста, как узнать каков максимальный объем памяти, который может выделить программа посредством функции...

Динамическое выделение памяти под структуру (malloc) - C++
Нашел данное решение на этом форуме, но никак не могу понять как оно работает. Вот даны структуры: struct info // структура...

Выделение памяти через malloc и считывание данных - C++
Здравствуйте. Имеется файл, в котором 6 чисел типа double. В программе имеется 2 массива. В 1-ый записываю все числа из файла, стоящие на...

Освобождение памяти malloc free - C++
В общем работаю над расширением для php (для тренировки в php и в c++ сразу) Суть дела вот в чем, наткнулся на конвертер php массива в...

9
nmcf
5362 / 4678 / 1568
Регистрация: 14.04.2014
Сообщений: 18,712
01.07.2014, 21:52 #2
Память освобождаешь в конце функции?
0
zasadadada
-27 / 8 / 1
Регистрация: 03.05.2013
Сообщений: 482
01.07.2014, 21:53  [ТС] #3
щас только что добавил в конце функции
C++
1
2
free(buff);
free(buff2);
результат тот же...
0
nmcf
5362 / 4678 / 1568
Регистрация: 14.04.2014
Сообщений: 18,712
01.07.2014, 21:56 #4
А второй free() где?
0
zasadadada
-27 / 8 / 1
Регистрация: 03.05.2013
Сообщений: 482
01.07.2014, 22:01  [ТС] #5
всяко пробовал, мистика, куда копать не понятно, может какой то лимит памяти привысил...
0
Renji
1927 / 1325 / 299
Регистрация: 05.06.2014
Сообщений: 3,830
01.07.2014, 22:01 #6
Она работает правильно, до тех пор пока я в неё не добовляю очередную строчку выделения памяти malloc,
после чего все результаты расчетов вообще другие.
Возможно что:
1) После malloc буфер забит рандомным мусором, а ты этот мусор читаешь.
2) Программа где-то вылетела за границы выделенной malloc памяти.
3) У тебя объявлена глобальная переменная buff2 которая используется где-то в потрохах функции.
Одним словом, отладчик в лапы и вперед.
0
zasadadada
-27 / 8 / 1
Регистрация: 03.05.2013
Сообщений: 482
01.07.2014, 22:06  [ТС] #7
1 Я не читаю его, просто выделил память buff2
2 не понял, пункт 1?
3 buff2 внутри функции, менял имена на всякие buff123.....
Вообщем выделение памяти влияет на расчет, что щас происходит.

При выделении памяти в зоне видимости файла, над main() всё работает. Но идея не в этом.
0
Renji
1927 / 1325 / 299
Регистрация: 05.06.2014
Сообщений: 3,830
01.07.2014, 22:10 #8
1 Я не читаю его, просто выделил память buff2
2 не понял, пункт 1?
1) Зато читаете buff1 который тоже создается с помощью malloc и тоже изначально забит мусором.
2) buff1[100500]=1234 даст непредсказуемый эффект если в buff1 нет как минимум 100501 элементов.
0
zasadadada
-27 / 8 / 1
Регистрация: 03.05.2013
Сообщений: 482
01.07.2014, 22:13  [ТС] #9
Я вас понял, как же быть , обнулять от и до ? первый потом второй?
0
Renji
1927 / 1325 / 299
Регистрация: 05.06.2014
Сообщений: 3,830
01.07.2014, 22:17 #10
Не читать buff1[100500] если вы туда ничего не записали или если размер buff1 составляет десять байт. А уж что конкретно исправлять надо, это от вашего кода зависит.
0
01.07.2014, 22:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2014, 22:17
Привет! Вот еще темы с ответами:

Выход за пределы выделенной памяти (new, malloc) - C++
День был пасмурный... Чашка чая помогала не заснуть перед монитором... На экране высвечивались два файла с разными расширениями: .c и...

Ошибка при выделении памяти с помощью malloc - C++
Помогите выдает ошибку в рядочке :"Ar = ( far *)malloc(size*sizeof(int));" полный текст програмы: #include "stdafx.h" using namespace...

Утечка памяти (решение СЛАУ методом Крамера, матрицы, malloc) - C++
Раньше программировал на C#/Java (а как следствие и расхлябанность по отношению к памяти), сейчас пытаюсь осилить C++. Более-менее понял...

При выделении памяти через malloc, как создавать объекты ? - C++
Выделяю память через malloc под 4 объекта, как их создать ? myClass * ptr = (myClass*) malloc(sizeof(myClass)*4); for(int i = 0;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru