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

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

Войти
Регистрация
Восстановить пароль
 
metallica
0 / 0 / 0
Регистрация: 24.09.2007
Сообщений: 16
#1

malloc(): memory corruption и corrupted double-linked list - C++

12.05.2013, 13:08. Просмотров 786. Ответов 0
Метки нет (Все метки)

всем привет!
такой вопрос.
пытаюсь попробовать простой пример кода для функции MPI_Allgatherv на кластере.
В итоге получаю следующую ошибку(и) :
*** glibc detected *** ./main: malloc(): memory corruption: 0x0000000001ee6820 ***
*** glibc detected *** ./main: corrupted double-linked list: 0x0000000001285510 ***

все идет нормально до самой функции, после чего мне приходится прерывать выполнение, потому что все зависает.
идея в том, что каждый поток работает с частью массива arrRandTime. рабочая часть определяется пределами
соседних элементов массива tranfArrayPos. потом, на каком-то шаге, мне нужно объеденить все рабочие части.
заранее спасибо за совет!


код:

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
#include <fstream>
#include <iomanip>
#include <iostream>
#include <math.h>
#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
int* malloc1dInitInt(int rows) ;
double* malloc1dInitDouble(int rows);
 
int main(int argc, char** argv) {
    
    int nprocs, myrank;
    
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
    MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
    
    srand(time(NULL)+myrank);
 
    int N0 = 100; 
    
    int* tranfArray = malloc1dInitInt(nprocs);
    int* tranfArrayPos = malloc1dInitInt(nprocs);
 
    if (N0 < nprocs) 
       for (int s = 0; s < nprocs; s ++) {
           if ( s < N0) {
               tranfArray [s] = 1; tranfArrayPos[s] = s;
           } else { tranfArray [s] = 0; tranfArrayPos[s] = s;}
       }
    // для nprocs = 16 заполняется нормально 
    if (N0 >= nprocs) {
        
           tranfArrayPos[0] = 0;
           int sum = 0;
           int s = 0;
             
           while ( N0 > ( sum + ceil((double)N0/nprocs) ) ) {
                 tranfArray[s] = ceil((double)N0/nprocs);
                 sum += tranfArray[s] ;
                 s+=1;
                 if (s == nprocs-1) break;
           }
           
           while ( s != (nprocs)) {
                if (s == (nprocs - 1)) {tranfArray[s] = N0-sum;} 
                tranfArray[s] = (N0-sum)/(nprocs-s);
                sum += tranfArray[s];
                s += 1;
 
           }
            
           sum = tranfArray[0];
           for (int s = 1; s < nprocs; s ++) { tranfArrayPos[s] = sum; sum += tranfArray[s]; }   
    }
    
    double*  arrRandTime = malloc1dInitDouble(N0);
     
    MPI_Allgatherv(&(  arrRandTime[tranfArrayPos[myrank]]), tranfArray[myrank] , MPI_DOUBLE, &( arrRandTime[tranfArrayPos[myrank]]), tranfArray, tranfArrayPos, MPI_DOUBLE, MPI_COMM_WORLD);
 
    MPI_Finalize();
    
    return 0;
}
 
double* malloc1dInitDouble(int rows) 
{
        
        double* array = (double*)malloc(rows*sizeof(double));
  
        for (int i=0; i < rows; i++) array[i] = 0.0;
 
        return array;
}
 
int* malloc1dInitInt(int rows) 
{
        
        int* array = (int*)malloc(rows*sizeof(int));
  
        for (int i=0; i < rows; i++) array[i] = 0;
 
        return array;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2013, 13:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос malloc(): memory corruption и corrupted double-linked list (C++):

Template double linked list C++ - C++
Пытался реализовать шаблон класса двусвязный список, элементарами которого является класс структура. 1. Как теперь инициализировать класс...

Malloc - heap corruption - C++
студия ошибку выдает на double *F=(float*)malloc((N)*sizeof(float)); эта часть кода у меня не хочет работать : ...

Linked List na C - C++
kak perevernut na C LinkedList esli mo0jno kod pojaluista.

Ошибка: double free or corruption (fasttop) - C++
Я описываю метод diamond-square. Это метод для процедурной генерации мира (кому интересно - вот описание) Но столкнулся с проблемой. При...

Linked List класс - C++
Ребят! Помогите пожалуйста найти ошибку! Я все написал, но чтобы я не делал выбрасывает с ошибкой:( //List.h #pragma once ...

C-style Linked List - C++
Итак, изучал я, значит, C-style Linked List (не знаю, как будет по-русски) и столкнулся с такой проблемой: надо его заполнить. Вроде все...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2013, 13:08
Привет! Вот еще темы с ответами:

Linked List описание - C++
/*!Begin Snippet:filebegin*/ #ifndef _LINKEDLIST_H_ #define _LINKEDLIST_H_ using namespace std; /*!Begin Snippet:fullnode*/ ...

Связанный список (Linked list). - C++
Добрый день. Вот пишу функцию (в коде название - smash), которая бы из текущего списка создавала 2 других: парные числа и непарные, но...

Проверить программу с linked list - C++
Есть программа, но уверен много недочётов - сам не вижу. Например, правильно ли описаны private member? Так же не понятно с VALUE...

Ошибка этапа исполнения: double free or corruption (fasttop): - C++
Доброе времени суток подскажите пожалуйста в чем может быть следующая проблема. Код который выводит программа приведен ниже. Сама...


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

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

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