Всех Благ!
Пишу прогу на ANSI-C в которой надо использовать строковую глобальную переменную. Объявляю ее так:
char *scrdir;
main (int argc, char *argv[]) { FILE *inputval;
...
scrdir=(char *)malloc(sizeof(char)); strcpy (scrdir, "./scripts/");
printf("scrdir = '%s'\n",scrdir); // выводит что надо
.....
// input=“filename.txt” strcat(scrdir, input); printf("\nPATH:'%s'\n",scrdir); //все выводит как надо: 'полный_путь_к_файлу'
if(inputval = fopen(scrdir, "r")) { // и тут вываливается с ошибками
....
собственно вывод проги:
scrdir = './scripts/' PATH:'./scripts/spiceinput.txt' *** glibc detected *** ./opt: free(): invalid next size (normal): 0x0804e018 *** ======= Backtrace: ========= /lib/libc.so.6[0xb7d32911] /lib/libc.so.6(__libc_free+0x84)[0xb7d33f84] /lib/libc.so.6[0xb7d24620] /lib/libc.so.6(fopen+0x2c)[0xb7d2465c] ./opt[0x804b89c] [0x2747874] ======= Memory map: ======== 08048000-0804d000 r-xp 00000000 03:07 45214 /home/work/workspace/opt/Release/opt 0804d000-0804e000 rw-p 00004000 03:07 45214 /home/work/workspace/opt/Release/opt 0804e000-0806f000 rw-p 0804e000 00:00 0 [heap] b7b00000-b7b21000 rw-p b7b00000 00:00 0 b7b21000-b7c00000 ---p b7b21000 00:00 0 b7c79000-b7c7b000 rw-p b7c79000 00:00 0 b7c7b000-b7ca9000 r-xp 00000000 03:06 11282 /usr/local/lib/libgslcblas.so.0.0.0 b7ca9000-b7caa000 rw-p 0002d000 03:06 11282 /usr/local/lib/libgslcblas.so.0.0.0 b7caa000-b7ccd000 r-xp 00000000 03:01 15777 /lib/libm-2.4.so b7ccd000-b7ccf000 rw-p 00022000 03:01 15777 /lib/libm-2.4.so b7ccf000-b7de8000 r-xp 00000000 03:01 15769 /lib/libc-2.4.so b7de8000-b7dea000 r--p 00118000 03:01 15769 /lib/libc-2.4.so b7dea000-b7dec000 rw-p 0011a000 03:01 15769 /lib/libc-2.4.so b7dec000-b7def000 rw-p b7dec000 00:00 0 b7def000-b7df6000 r-xp 00000000 03:06 11858 /usr/local/lib/libool.so.1.0.0 b7df6000-b7df7000 rw-p 00006000 03:06 11858 /usr/local/lib/libool.so.1.0.0 b7df7000-b7f63000 r-xp 00000000 03:06 11386 /usr/local/lib/libgsl.so.0.9.0 b7f63000-b7f6d000 rw-p 0016b000 03:06 11386 /usr/local/lib/libgsl.so.0.9.0 b7f6d000-b7f6e000 rw-p b7f6d000 00:00 0 b7f79000-b7f83000 r-xp 00000000 03:01 20237 /lib/libgcc_s.so.1 b7f83000-b7f84000 rw-p 00009000 03:01 20237 /lib/libgcc_s.so.1 b7f84000-b7f85000 rw-p b7f84000 00:00 0 b7f85000-b7f9f000 r-xp 00000000 03:01 15762 /lib/ld-2.4.so b7f9f000-b7fa1000 rw-p 00019000 03:01 15762 /lib/ld-2.4.so bf9cb000-bf9e1000 rw-p bf9cb000 00:00 0 [stack] ffffe000-fffff000 ---p 00000000 00:00 0 [vdso] Аварийный останов ------------------------
Путь к программе (scrdir) выводится верный. Если вместо переменной scrdir указать сам путь, то файл открывается. Если прописать заведомо неверный - программа вываливается с аналогичным сообщением. Не понимаю в чем дело.