|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
[C] Problemi con malloc su matrice (fatta male?)
Salve a tutti,
so dov'è il problema nel codice che segue, ma non riesco a correggerlo. Codice:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char* argv[]){
int i,j=0;
int multiplication = 0;
int n_cpu = 8;
int ops_per_thread = 16;
int **intervals;
int num_blocks = 1024;
intervals = (int**)malloc( n_cpu * sizeof(int) );
for(i=0; i<n_cpu; i++)
intervals[i] = (int*)malloc( 2 * sizeof(int) );
for(i=0;i<n_cpu;i++){
multiplication = ops_per_thread*i;
intervals[i][0] = multiplication;
if(i==n_cpu-1){// The last thread gets also the remaining
multiplication = ops_per_thread*(i+1)-1;
intervals[i][1] = multiplication + (num_blocks % n_cpu);
}else{
multiplication = ops_per_thread*(i+1)-1;
intervals[i][1] = multiplication;
}
}
printf("The matrix is:\n");
for (i = 0; i < n_cpu; i++) {
for (j = 0; j < 2; j++)
printf("%6d ", intervals[i][j]);
printf("\n");
}
return 1;
}
Codice:
The matrix is:
0 15
16 31
32 47
48 63
64 79
80 95
96 111
112 127
Deduco quindi che sia un problema di scrittura in memoria non allocata, ma non capisco perché. Eppure fin'ora ho sempre allocato le matrici in questo modo. Perché (se è così) le ultime due righe non vengono allocate? Eppure il ciclo di allocazione iniziale, arriva fino a 7. Se ci fosse qualche errore in allocazione dovrebbe uscire fuori, o sbaglio? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Codice:
... intervals = (int**)malloc( n_cpu * sizeof(int*) ); ... |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Grande,
grazie infinite! Ora funziona bene. Ti devo una birra! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:46.




















