Как решить нарушение прав доступа, пишущий ошибку местоположения?

Как мы уже обсуждали в другом потоке, этот метод доступен только после загрузки геометрических данных модели - зритель должен сказать, подходит ли модель для перечисления фрагментов узла, прежде чем он предоставит метод:

viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT,()=> viewer.model.getData().instanceTree.enumNodeFragments(dbid, fragId => console.log(fragId)))

См живой код здесь .

11
задан GntS 20 January 2017 в 14:12
поделиться

4 ответа

char *str = "Hello World"; строка константы и не может быть изменена. Компилятор является бесплатным поместить его в неперезаписываемое местоположение, приводящее к катастрофическому отказу, который Вы видите.

Замена объявления с char str[] = "Hello World"; должен сделать то, что Вы хотите, помещая строку в модифицируемый массив на стеке.

26
ответ дан 3 December 2019 в 02:02
поделиться

Нет, Вы не должны. "Привет мир" является литералом постоянной строки, необходимо выделить память с помощью malloc () в C, или новый в C++, если Вы хотите память, Вы свободны изменить.

4
ответ дан 3 December 2019 в 02:02
поделиться

Как другие указали, литеральные строки могут быть сохранены в области только для чтения памяти. Вы компилируете с включенными предупреждениями? Необходимо получить предупреждение об отбрасывании constness строкового литерала.

Что можно сделать, вместо этого:

char *str = strdup("Hello, world!");
// Modify the string however you want
free(str);
3
ответ дан 3 December 2019 в 02:02
поделиться

Это - потому что Вы пишете в устройство хранения данных строкового литерала, которое может быть в защищенной области памяти.

2
ответ дан 3 December 2019 в 02:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: