Не работает этот блок - SefFault в strcmp:
while (getline(&line, &len, descr) != -1) {
n = sscanf(line, "%s %d", &filename, &count);
if (n < 2)
continue;
for (i = 0; i < count; i++) {
if (! strcmp(filename, "default"))
agent = agent_new_default();
else
agent = agent_new_from_object(filename);
x = (int)((double)rand())/((double)RAND_MAX)*earth_width;
y = (int)((double)rand())/((double)RAND_MAX)*earth_height;
list_add(&world->agents, agent);
list_add(&world->earth[x][y].agents, agent);
agent->cell = &world->earth[x][y];
}
}
С помощью gdb обнаружил, что sscanf возвращает неверный указатель - на невыделенную область. Я что-то делаю не так?
(gdb) b 68
Breakpoint 1 at 0x8048a0a: file agtevo1.c, line 68.
(gdb) r
Starting program: /home/wieker/Projects/agtevo/agtevo
Breakpoint 1, populate_world (world=0x804c008) at agtevo1.c:68
68 n = sscanf(line, "%s %d", &filename, &count);
(gdb) s
69 if (n < 2)
(gdb) print filename
$1 = 0x61666564 <Address 0x61666564 out of bounds>
(gdb) print count
$2 = 100
(gdb) print line
$3 = 0x80515f0 "default 100\n"
(gdb)