Есть такой код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
using namespace System;
void reverse (char * str, int count = 0);
int main(array<System::String ^> ^args)
{
char * str = "Hello";
reverse (str, 3);
cout<<str;
_getch();
return 0;
}
void reverse (char * str, int count)
{
char temp;
if (count == 0)
count = strlen(str) - 1;
for (int i = 0, j = count; i < j; i++, j--)
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
reverse() записывает в str первые count символов в обратном порядке, если count не указан или равен нулю, то используется вся строка. После строки "str[i] = str[j];" появляется System.AccessViolationException.
Это не первый вариант кода этой функции. В первом варианте, я динамически создавал массив char и записывал в него str наоборот, но при копировании его обратно в str (через strcpy()) вылетало то же самое исключение.
Это пример из книги Шилдта "Самоучитель С++", этот вариант написан в книге. Я начинаю думать, что проблема именно в VS.
UPD. Также у меня и раньше вылетало это исключение при работе с массивами char, выделенными с помощью new в VS, хотя казалось, что должно работать. Ответа на свой вопрос я в интернетах не нашел, в основном люди неправильно выделяли память, либо не выделяли вообще.