Hi all,
For the life of me, I can't figure out how I am segfaulting. The following is a
minimal test
case. I think something's not getting initialized and thus causing some problem with
memory, but
I can't tell what it is.
Output from the command line resembles:
Index = 0. String is 1. Value = 1.000000
Segmentation fault
If I run this from vi, I get a bit further, which is why I think that's it's a memory
problem of
some sort.
Index = 0. String is 1. Value = 1.000000
Index = 1. String is 2. Value = 2.000000
Index = 2. String is 3.4. Value = 3.400000
Command terminated
Cheers,
Ovid
--
#!/usr/local/bin/perl
use strict;
use warnings;
use Inline C => <<'END_OF_C_CODE';
void train(SV* input)
{
int i,length;
AV *array;
char* string;
double value = 0;
if (SvROK(input) && SvTYPE(SvRV(input)) == SVt_PVAV) {
array = (AV*)SvRV(input);
length = av_len(array)+ 1;
for (i = 0; i < length; i++) {
SV *elem, **tmp = av_fetch(array, i, 0);
if (!tmp)
croak("Error fetching array index %i", i);
elem = *tmp;
string = SvPV(elem, PL_na);
if (looks_like_number(string)) {
value = atof(string);
printf("Index = %d. String is %s. Value = %f\n", i, string, value);
}
else {
printf("%s does not look like a number\n");
}
}
}
else
croak("train() takes an arrayref.");
}
END_OF_C_CODE
train( [1.0, 2.0, 3.4, 5.7] );
=====
Silence is Evil http://users.easystreet.com/ovid/philosophy/indexdecency.htm
Ovid http://www.perlmonks.org/index.pl?node_id=17000
Web Programming with Perl http://users.easystreet.com/ovid/cgi_course/
__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com