The Dark Side of Hardware Upgrade Forum

...bringing out the worst in you since 2003...
Oggi è mar ott 06, 2026 1:18 pm

Tutti gli orari sono UTC +1 ora


-->
-->

Apri un nuovo argomento Rispondi all’argomento  [ 40 messaggi ]  Vai alla pagina 1, 2  Prossimo
Autore Messaggio
 Oggetto del messaggio: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 7:01 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 15, 2010 7:35 pm
Messaggi: 5339
Località: Tua madre succhia i cazzi all'inferno, idiota
Codice:
#include<stdio.h>
#include<stdlib.h>

void func(int m, int n, double * restrict a, double * restrict b, double * restrict c);
int main(int argc, char*argv[]){
double *a, *b, *c;
int i, j, m, n;

printf("Please give me m and n: ");
scanf("%d%d",&m,&n);

if((a=(double*)malloc(m*sizeof(double)))==NULL)perror("memory allocation for a");
if((a=(double*)malloc(m*n*sizeof(double)))==NULL)perror("memory allocation for b");
if((a=(double*)malloc(n*sizeof(double)))==NULL)perror("memory allocation for c");

printf("Initializing matrix M and vector C\n");
for(j=0; j<n; j++) c[j]=2.0;
for(i=0; i<m; i++)
for(j=0; j<n; j++)
b[i*n+j]=i;

printf("Executing mxv function for m=%d n=%d\n", m, n);
(void) func(m, n, a, b, c);//le variabili diventano restrictedree
free(a);
free(b);
free(c);
return 0;}

Immagine


Anche, che cavolo serve questa riga?
if((a=(double*)malloc(m*sizeof(double)))==NULL)perror("memory allocation for a");
Oltre ad allocare lo spazio.
_________________
Long Live Iran
Immagine
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 7:16 pm 
Schiavo
Avatar utente
Iscritto il: mar dic 11, 2007 3:29 pm
Messaggi: 1442
premetto che sono parecchio arrugginito in programmazione, ma a parte i cicli for senza parentesi graffe e il programma fatto un po' a culo (tra l'altro cosa dovrebbe fare?), la definizione della funzione "func" dove sta?
_________________
Gesù è venuto per salvarci dal peccato, ma continuo a vedere peccatori.
Thor ci protegge dai demoni e dai giganti di ghiaccio, ed in effetti non ne vedo in giro.
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 7:26 pm 
Schiavo
Avatar utente
Iscritto il: gio apr 07, 2011 3:00 pm
Messaggi: 1367
E' C e non C++. L'errore è chiaro, il compilatore non pare riconoscere che func() ha più di due argomenti così a naso. Prova a rimuovere i "restrict", innanzitutto. Tanto sono useless anyway, imho.
E comunque in quel codice hai memory leaks a pioggia e poi un segmentation fault per direttissima. :asd:


Informazioni sulla parte che hai chiesto alla fine del post le trovi qui.
_________________
In Soviet Italy, the evil army owns you!
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 8:07 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 15, 2010 7:35 pm
Messaggi: 5339
Località: Tua madre succhia i cazzi all'inferno, idiota
L'ho copiato da un libro. Che palle, voglio solo che funzioni. E' un programma base per spiegare la parallelizzazione nella moltiplicazione di una matrice per un vettore. Quello che non capisco del pezzo è: che senso ha scrivere if(a==NULL)perror("memory allocation for a");? Semplicemente dato che ho appena allocato nuovo spazio per la variabile questo viene inizializzato a zero e l'output del messaggio è certo? restrict serve per qualcosa come allocare aree di memoria in locazioni differenti. Boh.

Immagine

Cita:
#include <stdio.h>
#include <stdlib.h>
void mxv(int m, int n, double * restrict a,
double * restrict b, double * restrict c);
int main(int argc, char *argv[]){

double *a,*b,*c;
int i, j, m, n;
printf("Please give m and n: ");
scanf("%d %d",&m,&n);
if ( (a=(double *)malloc(m*sizeof(double))) == NULL )
perror("memory allocation for a");
if ( (b=(double *)malloc(m*n*sizeof(double))) == NULL )
perror("memory allocation for b");
if ( (c=(double *)malloc(n*sizeof(double))) == NULL )
perror("memory allocation for c");
printf("Initializing matrix B and vector c\n");
for (j=0; j<n; j++)
c[j] = 2.0;
for (i=0; i<m; i++)
for (j=0; j<n; j++)
b[i*n+j] = i;
printf("Executing mxv function for m = %d n = %d\n",m,n);
(void) mxv(m, n, a, b, c);
free(a);free(b);free(c);
return(0);
}

Adesso ho fatto copia/incolla. Pag 39.
_________________
Long Live Iran
Immagine
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 8:19 pm 
Schiavo
Avatar utente
Iscritto il: gio apr 07, 2011 3:00 pm
Messaggi: 1367
Aldin @ ha scritto:
L'ho copiato da un libro. Che palle, voglio solo che funzioni. E' un programma base per spiegare la parallelizzazione nella moltiplicazione di una matrice per un vettore. Quello che non capisco del pezzo è: che senso ha scrivere if(a==NULL)perror("memory allocation for a");? Semplicemente dato che ho appena allocato nuovo spazio per la variabile questo viene inizializzato a zero e l'output del messaggio è certo? restrict serve per qualcosa come allocare aree di memoria in locazioni differenti. Boh.


IIRC restrict serve a specificare che una determinata locazione di memoria è accessibile solo dal puntatore specificato. Però solitamente ad oggi i compilatori dovrebbero essere in grado di determinare la cosa da soli ed agire di conseguenza, indi per cui non è solitamente necessaria. E' un hint al compilatore come lo è "inline". Poi oh, magari mi sbaglio, non ho esperienza decennale nello sviluppo in C :v

Comunque,
Codice:
if ( (a=(double *)malloc(m*sizeof(double))) == NULL )

è diverso da:
Codice:
if(a==NULL)

no?
Il puntatore dopo una malloc() è nullo solamente se non è possibile allocare la memoria richiesta, partendo da questo puoi capire il motivo di quell'if. :oki:

Prova a rimuovere la restrict per vedere se l'errore cambia.
_________________
In Soviet Italy, the evil army owns you!
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 9:18 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
Guarda il PRIMO errore, non quello in rosso.
"restrict" non è definito infatti il compilatore si ferma al primo ignorando i seguenti argomenti della funzione "func" e per lui quindi "func" ha 3 parametri: int, int, double.
In realtà per il compilatore "a" non è definito e "restrict" è il nome della variabile.

Se usi gcc devi attivare un flag "-std=c99", sennò usa __restrict__
Se non usi gcc non lo so.

Da qui il secondo errore. passi 5 argomenti ma lui ne aspetta 3.

Ma anche se fixi gli errori poi ti arriva un bel link error "undefined function 'func'" perché anche un handicappato lo noterebbe che la funzione è solo dichiarata ma non definita :challenge:
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 9:21 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 15, 2010 7:35 pm
Messaggi: 5339
Località: Tua madre succhia i cazzi all'inferno, idiota
Ok. Ho rimosso tutto il riferimento alla funzione. Mi da segmentation shit su b[i*n+j]=i. WTF? Sono cose i recenti compilatori non digeriscono o l'esempio fa schifo? A parte me che l'unica esperienza che ho è qualche esercizio.

Cita:
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char*argv[]){
double *a, *b, *c;
int i, j, m, n;

printf("Please give me m and n: ");
scanf("%d%d",&m,&n);

if((a=(double*)malloc(m*sizeof(double)))==NULL)perror("memory allocation for a");
if((a=(double*)malloc(m*n*sizeof(double)))==NULL)perror("memory allocation for b");
if((a=(double*)malloc(n*sizeof(double)))==NULL)perror("memory allocation for c");

printf("Initializing matrix M and vector C\n");
for(j=0; j<n; j++){
c[j]=2.0;}
for(i=0; i<m; i++){
for(j=0; j<n; j++){
b[i*n+j]=i;}}

free(a);
free(b);
free(c);
return 0;}
Se volessi dichiarare un elemento del tipo v[][][] come farei ad allocargli memria con malloc?
_________________
Long Live Iran
Immagine
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 9:28 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
Allochi 3 volte a e non a b c
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 9:29 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 15, 2010 7:35 pm
Messaggi: 5339
Località: Tua madre succhia i cazzi all'inferno, idiota
trallallero @ ha scritto:
Allochi 3 volte a e non a b c

:yuno: speak clrly?
_________________
Long Live Iran
Immagine
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 9:29 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
Intendo questo:

if((a=(double*)malloc(m*sizeof(double)))==NULL)perror("memory allocation for a");
if((a=(double*)malloc(m*n*sizeof(double)))==NULL)perror("memory allocation for b");
if((a=(double*)malloc(n*sizeof(double)))==NULL)perror("memory allocation for c");
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 9:33 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 15, 2010 7:35 pm
Messaggi: 5339
Località: Tua madre succhia i cazzi all'inferno, idiota
Grazie cangurone :sisi:
_________________
Long Live Iran
Immagine
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 9:35 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
Prego micetto :better:
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 9:35 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
Però vedi che adesso il programma non fa niente.
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 9:43 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 15, 2010 7:35 pm
Messaggi: 5339
Località: Tua madre succhia i cazzi all'inferno, idiota
Il libro modifica il programma nelle pagine successive per farci qualcosa di utile. Ah:
Se volessi dichiarare un elemento del tipo v[i][j][k] come farei ad allocargli memria con malloc? v=(double*)malloc(i*j*k*sizeof(double)); ?
O forse v=(double*)calloc(i*j*k,sizeof(double)); ? v o &v?
_________________
Long Live Iran
Immagine
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 9:56 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
Uhm, ho da poco preso un benzocoso perché mi son rotto il cazzo di non dormire quindi potrei dire puttanate (mi gira la testa di brutto), ma la cosa è più complessa.


[i][j][k] = 3 dimensioni quindi devi allocare 1 volta la prima dimensione, n volte la seconda dimensione per ogni indice della prima dimensione ed n volte la terza dimensione per ogni indice della seconda dimensione.

Se non sei esperto di C eviterei di lavorare coi puntatori, specialmente a più dimensioni.
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 9:59 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
Esempio:

Codice:
int ***array = malloc(3*sizeof(int**));
  int i, j;

  for (i = 0; i < 3; i++) {
    *array[i] = malloc(3*sizeof(int*));
    for (j = 0; j < 3; j++) {
      array[i][j] = malloc(3*sizeof(int));
    }
  }
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 10:02 pm 
Schiavo
Avatar utente
Iscritto il: ven feb 03, 2006 10:50 pm
Messaggi: 5164
Località: Reggio Calabria --> London
dio cane, perche' questa tortura nel 2011 quando non solo abbiamo framework che fanno il garbage collecting automatico, ma adirittura suddividono dinamicamente i thread in funzione del numero di processori del sistema e in funzione del numero di processori DISPONIBILI IN QUEL MOMENTO???? :muro:
_________________
:scongiuri:
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 10:07 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
TigerShark @ ha scritto:
dio cane, perche' questa tortura nel 2011 quando non solo abbiamo framework che fanno il garbage collecting automatico, ma adirittura suddividono dinamicamente i thread in funzione del numero di processori del sistema e in funzione del numero di processori DISPONIBILI IN QUEL MOMENTO???? :muro:

Gente che sa fare queste torture ha potuto scrivere in C il Java.
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 10:10 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 15, 2010 7:35 pm
Messaggi: 5339
Località: Tua madre succhia i cazzi all'inferno, idiota
trallallero @ ha scritto:
Esempio:

Codice:
int ***array = malloc(3*sizeof(int**));
  int i, j;

  for (i = 0; i < 3; i++) {
    *array[i] = malloc(3*sizeof(int*));
    for (j = 0; j < 3; j++) {
      array[i][j] = malloc(3*sizeof(int));
    }
  }
Ma non un puntatore. Direttamente l'array v[a][b][c]. Diventa qualcosa come... ?
Codice:
for(int i=0; i<a; i++){
...
for(int j=0; j<b; j++){
...
for(int k=0; k<c; k++){
...}}}

TigerShark @ ha scritto:
dio cane, perche' questa tortura nel 2011 quando non solo abbiamo framework che fanno il garbage collecting automatico, ma adirittura suddividono dinamicamente i thread in funzione del numero di processori del sistema e in funzione del numero di processori DISPONIBILI IN QUEL MOMENTO???? :muro:
:boh:
_________________
Long Live Iran
Immagine
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 10:14 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
Aldin @ ha scritto:
Ma non un puntatore. Direttamente l'array v[a][b][c]. Diventa qualcosa come... ?
Codice:
for(int i=0; i<a; i++){
...
for(int j=0; j<b; j++){
...
for(int k=0; k<c; k++){
...}}}

Non so se ci sono piccoli errori ma in linea di massima si.
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 10:17 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 15, 2010 7:35 pm
Messaggi: 5339
Località: Tua madre succhia i cazzi all'inferno, idiota
Si ma cosa ci va nei puntini? :asd:
**v[i]=malloc(a*sizeof(int**));
*v[i][j]=malloc(b*sizeof(int*));
v[i][j][k]=malloc(c*sizeof(int));
?
_________________
Long Live Iran
Immagine
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 10:23 pm 
Schiavo
Avatar utente
Iscritto il: lun lug 19, 2010 6:08 pm
Messaggi: 7370
Località: Smileland (già Crucconia)
Ah, pensavo volessi leggere i valori di una matrice.
Niente, sono andato, a domani :okay:
_________________
Se nel forum sono attivo vuol dire che al lavoro sto facendo documentazione.
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 10:30 pm 
Schiavo
Avatar utente
Iscritto il: gio lug 15, 2010 7:35 pm
Messaggi: 5339
Località: Tua madre succhia i cazzi all'inferno, idiota
Pastiglie o gocce? Che marca? :asd:
_________________
Long Live Iran
Immagine
Top
 Profilo E-mail Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 10:55 pm 
Schiavo
Avatar utente
Iscritto il: mar dic 11, 2007 3:29 pm
Messaggi: 1442
aldin, se vuoi imparare a programmare bene in C ti consiglio questo libro


Immagine
_________________
Gesù è venuto per salvarci dal peccato, ma continuo a vedere peccatori.
Thor ci protegge dai demoni e dai giganti di ghiaccio, ed in effetti non ne vedo in giro.
Top
 Profilo Non connesso  
 
 Oggetto del messaggio: Re: [C/C++]Why u not work?
MessaggioInviato: gio set 29, 2011 10:58 pm 
Schiavo
Avatar utente
Iscritto il: ven feb 03, 2006 10:50 pm
Messaggi: 5164
Località: Reggio Calabria --> London
trallallero @ ha scritto:
TigerShark @ ha scritto:
dio cane, perche' questa tortura nel 2011 quando non solo abbiamo framework che fanno il garbage collecting automatico, ma adirittura suddividono dinamicamente i thread in funzione del numero di processori del sistema e in funzione del numero di processori DISPONIBILI IN QUEL MOMENTO???? :muro:

Gente che sa fare queste torture ha potuto scrivere in C il Java.

E ora c'e gente che riscrive il python in python e in java scrive scala.
cazzo.
Infatti ho specificato nel 2011.
In che anno e' nato java?
e perche' e' stato scritto in C?
E scala in che anno e' nato?
e perche' e' stato scritto in java?
_________________
:scongiuri:
Top
 Profilo Non connesso  
 
Visualizza ultimi messaggi:  Ordina per  
Apri un nuovo argomento Rispondi all’argomento  [ 40 messaggi ]  Vai alla pagina 1, 2  Prossimo
-->

Tutti gli orari sono UTC +1 ora


Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi inviare allegati

Vai a:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzione Italiana phpBB.it