evg_96, Вы сначала освободили память: free(current), а потом обращаетесь к уже освобожденной памяти: current->next. После free указатель уже не действительный и его использовать нельзя.
В gcc ошибка не проявляется, потому что используются разные менеджеры памяти внутри стандартной библиотеки (она хоть и стандартная снаружи, но внутри все реализовывают по разному).
Вообще, по моему, тут и компилятор мог ругнуться, возможно надо выставить уровень предупреждений по выше.
evg_96, Почему?
Обычно я делаю так: собираю приложение с отладочной информацией, запускаю под отладчиком в IDE, стартую без точек останова. Там где произойдет ошибка программа остановится и вернется в отладчик, в отладчике нужно по стеку вызовов перейти на свою последнюю функцию и уже в нужной точке анализируешь, что ж ты там написал.
Иногда бывает, что программа с отладочной информацией работает, а в "релизной" сборке не работает - значит где-то выход за пределы массива/обращение к не выделенной памяти (не инициализированному указателю)...
На каком этапе работы программа вываливается (это можно определить по сообщениям, которые выводятся программой)? Какие входные данные подаете при этом? На чем именно из входных данных программа вываливается?
Вроде бы вы все правильно делаете, не раз переносил БД таким способом.
Файлы БД лежат на локальном диске сервера БД?
Вы работаете в SSMS на сервере или на удаленном раб.месте?
Какой конкретно путь указываете при присоединении в SSMS?
ТопМетаФизик, Если что, VLA - это:
int v[b];
т.е. массив переменной длинный, невзирая на то что b у вас const int, но инициализируется она от простого int, компилятор это видит, поэтому это VLA, а не статический массив.
Да, у микрософта на многие вещи свой взгляд, впрочем так же как и у остальных. И компилятор микрософт не поддерживает полностью C99, где появились VLA.
Что именно не работает?
Ошибка компиляции, не верные результаты?
Напишите тест - простую консольную программу на С++, чтоб не приплетать яву и отлаживайте на ней свою функцию, пока не получите правильный результат. Потом работающую функцию используйте в связке с явой. Функцию лучше сразу выделить в отдельный файл cpp, чтоб проще было использовать ее в разных сборках.
tar по моему достаточно быстрый, учитывая, что это не архиватор.
Еще tar умеет архив кидать в stdout и получать из stdin при распаковке, с помощью этого механизма можно передавать без использования дополнительных файлов.
В gcc ошибка не проявляется, потому что используются разные менеджеры памяти внутри стандартной библиотеки (она хоть и стандартная снаружи, но внутри все реализовывают по разному).
Вообще, по моему, тут и компилятор мог ругнуться, возможно надо выставить уровень предупреждений по выше.