Как мы уже обсуждали в другом потоке, этот метод доступен только после загрузки геометрических данных модели - зритель должен сказать, подходит ли модель для перечисления фрагментов узла, прежде чем он предоставит метод:
viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT,()=> viewer.model.getData().instanceTree.enumNodeFragments(dbid, fragId => console.log(fragId)))
См живой код здесь .
char *str = "Hello World";
строка константы и не может быть изменена. Компилятор является бесплатным поместить его в неперезаписываемое местоположение, приводящее к катастрофическому отказу, который Вы видите.
Замена объявления с char str[] = "Hello World";
должен сделать то, что Вы хотите, помещая строку в модифицируемый массив на стеке.
Нет, Вы не должны. "Привет мир" является литералом постоянной строки, необходимо выделить память с помощью malloc () в C, или новый в C++, если Вы хотите память, Вы свободны изменить.
Как другие указали, литеральные строки могут быть сохранены в области только для чтения памяти. Вы компилируете с включенными предупреждениями? Необходимо получить предупреждение об отбрасывании constness строкового литерала.
Что можно сделать, вместо этого:
char *str = strdup("Hello, world!");
// Modify the string however you want
free(str);
Это - потому что Вы пишете в устройство хранения данных строкового литерала, которое может быть в защищенной области памяти.