Библиотека Math.h в c

Рейтинг: 0Ответов: 1Опубликовано: 13.11.2014

Ошибка совсем другая:

Парни! У меня совершенно иная ошибка, я проверял руками, только выделяя память по 16 байт. Попробовав выделить 256кб при попытке записать нижележащим кодом, получил segmentation fault. В чем беда, все равно не знаю.

====

Первый текст:

Решил попробовать себя в простых задачках. Вот она http://acm.timus.ru/problem.aspx?space=1&num=1001
Накидал быстренько такой код:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(){
  // int mem = 256*1024; // input raw <256KB
  int mem = 16; // for tests
  double *arr;
  arr = (double *)malloc(mem);

  printf("%.4fl\n", sqrt((double)424));
  int i = mem/sizeof(int);
  while(i>0 && scanf("%lf", &arr[--i]))
      ;

  printf("\n---------------------------------------\n\n");

  for(; i<mem/sizeof(int) ;i++){
      printf("%.4f\n", sqrt(arr[i]));
  }

return 0;
}

По условиям необходимо компилировать со следующими директивами:

gcc -static -fno-strict-aliasing -DONLINE_JUDGE -lm -s 
    -Wl,--stack=67108864 -O2 -o %1.exe %1.

Но в таком случае компилятор кидает ошибку:

undefined reference to `sqrt'

Хотя -lm есть. Если сунуть в код просто printf("%lf", sqrt((double)1552423)) - то никаких ошибок нет и корень выдается.

Я как гордый предок макак скрутил директивы несколько иначе: gcc -static -fno-strict-aliasing -s -O2 -o execute src.c -lm - у меня на машине работает, а система тестирования кидает Runtime error (access violation).

Что делать?

п.с: какой способ был бы правильным для считывания неизвестного количества входных данных? Не городить же структуры руками.

Ответы

Ответов пока нет.