wszerad
(wszerad)
11 Październik 2012 11:54
#1
void createBuff(int *buff, char type, int size){
switch(type){
case 0:
buff = malloc(size * sizeof(int));
break;
case 1:
buff = malloc(size * sizeof(float));
break;
default:
buff = malloc(size * sizeof(char));
break;
}
if(buff==NULL){
printf("Blad alokacji");
exit(0);
}
buff[0] = size;
buff[1] = 2;
return;
}
int main(){
int *list;
createBuff(list,0,10);
printf("%d",list[0]);
return 0;
Chciałbym aby Printf wyświetlał liczbę 10, natomiast list = 2, list-1 = -6 co już kompletnie nie wiem skąd się bierze.
nr47
(Sawyer47)
11 Październik 2012 12:39
#2
Przypisując w ciele funkcji do argumentu buff, przypisujesz do lokalnej kopii, po wyjściu z funkcji nie masz już tego wskaźnika i masz wyciek pamięci. Wartość zmiennej list w main się nie zmienia i czytasz śmieci, nieokreślony obszar pamięci.
void createBuff(int **buff, char type, int size){
switch(type){
case 0:
*buff = malloc(size * sizeof(int));
break;
case 1:
*buff = malloc(size * sizeof(float));
break;
default:
*buff = malloc(size * sizeof(char));
break;
}
if(*buff==NULL){
printf("Blad alokacji");
exit(0);
}
*buff[0] = size;
*buff[1] = 2;
return;
}
int main(){
int *list;
createBuff(&list,0,10);
printf("%d",list[0]);
return 0;
Teraz powinno działać.