Witam!
Próbowałem napisać jakiś prosty program wykorzystujący zmienne dynamiczne, niestety program przestawał działać w momencie wywoływania funkcji malloc bądź sprintf. Podobne przypadki były już tu omawiane, jednak ten jest trochę inny:
syscalls.c
funkcja main:
Terminal wyrzuca mi tylko "1", wnioskuję, że _sbrk też się nie wywołuje.
Czy ktoś wie jaka może być tego przyczyna?
Pozdrawiam
Wojt
Próbowałem napisać jakiś prosty program wykorzystujący zmienne dynamiczne, niestety program przestawał działać w momencie wywoływania funkcji malloc bądź sprintf. Podobne przypadki były już tu omawiane, jednak ten jest trochę inny:
syscalls.c
Code:
#include <sys/types.h>
#include <errno.h>
#include "uart.h"
caddr_t _sbrk(int incr)
{
uart0_sendstr("w sbrk");
extern char _end; /* Defined by the linker */
extern char _ram_end;
static char *heap_end;
char *prev_heap_end;
if(heap_end == 0)
{
heap_end = &_end;
}
prev_heap_end = heap_end;
if(heap_end + incr > (char*)&_ram_end)
{
errno = ENOMEM;
uart0_sendstr("blad");
return (caddr_t) -1;
}
heap_end += incr;
return (caddr_t) prev_heap_end;
}
funkcja main:
Code:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
uart_init();
uart0_sendstr("1");
char *p;
char str[32];
sprintf(str,"%f",15);
uart0_sendstr("2");
p = malloc(2);
uart0_sendstr("3");
while(1);
}
Terminal wyrzuca mi tylko "1", wnioskuję, że _sbrk też się nie wywołuje.
Czy ktoś wie jaka może być tego przyczyna?
Pozdrawiam
Wojt