exception : 0xC0000005: Access Violation
Question posted by: batista
(Guest)
on
November 7th, 2005 09:55 AM
Hi,
I am getting the following exception
First-chance exception in TestMansoor.exe: 0xC0000005: Access Violation
When i run the following code
1 int main(void)
2 {
3 char* str1 = "MA";
4 char s = str1[0];
5 str1[0] = 'r';
6 return 0;
7 }
i'm getting exception on line 5. Why?
Bye.
4
Answers Posted
batista wrote:[color=blue]
> Hi,
>
> I am getting the following exception
>
> First-chance exception in TestMansoor.exe: 0xC0000005: Access Violation
>
> When i run the following code
>
> 1 int main(void)
> 2 {
> 3 char* str1 = "MA";
> 4 char s = str1[0];
> 5 str1[0] = 'r';
> 6 return 0;
> 7 }
>
> i'm getting exception on line 5. Why?
>[/color]
str is a constant string , you can only access it. If you want to
change the contents of str, you will either have to declare it as an
array of allocate memory for it.
batista wrote:[color=blue]
> Hi,
>
> I am getting the following exception
>
> First-chance exception in TestMansoor.exe: 0xC0000005: Access Violation
>
> When i run the following code
>
> 1 int main(void)
> 2 {
> 3 char* str1 = "MA";
> 4 char s = str1[0];
> 5 str1[0] = 'r';
> 6 return 0;
> 7 }
>
> i'm getting exception on line 5. Why?
>
> Bye.
>[/color]
becouse "MA" is a string iteral, and as such cant be modified, even
though its possilble to get a non const pointer to it for some bizzare
reason
your code is more less equivalent of
((char*)"MA")[0] = 'r';
if you want to get a copy of "MA" what you want to do is
char str1[] = "MA";
now str1[0] is modifiable
batista wrote:[color=blue]
> Hi,
>
> I am getting the following exception
>
> First-chance exception in TestMansoor.exe: 0xC0000005: Access Violation
>
> When i run the following code
>
> 1 int main(void)
> 2 {
> 3 char* str1 = "MA";
> 4 char s = str1[0];
> 5 str1[0] = 'r';
> 6 return 0;
> 7 }
>
> i'm getting exception on line 5. Why?[/color]
Line 3 should read:
const char* str1 = "MA";
It is specifically allowed by the standard as your original because of
the volume of legacy code that would otherwise break. (IMHO a bad move
by the standards comittee.)
You can however rewrite line 3 like:
char str1[] = "MA";
.... now you're free to change the three characters that is str1.
In article <1131356517.625797.72670@g49g2000cwa.googlegroups.c om>,
batista <saadtheleon@gmail.com> wrote:[color=blue]
>Hi,
>
>I am getting the following exception
>
>First-chance exception in TestMansoor.exe: 0xC0000005: Access Violation
>
>When i run the following code
>
>1 int main(void)
>2 {
>3 char* str1 = "MA";
>4 char s = str1[0];
>5 str1[0] = 'r';
>6 return 0;
>7 }
>
>i'm getting exception on line 5. Why?[/color]
Check out http://www.comeaucomputing.com/techtalk/#stringliteral
--
Greg Comeau / Celebrating 20 years of Comeauity!
Comeau C/C++ ONLINE ==> http://www.comeaucomputing.com/tryitout
World Class Compilers: Breathtaking C++, Amazing C99, Fabulous C90.
Comeau C/C++ with Dinkumware's Libraries... Have you tried it?
|
|
|
What is Bytes?
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 196,798 network members.
Top Community Contributors
|