为什么这个代码在msdev上运行时会产生访问冲突?

时间:2009-07-16 11:54:04

标签: c pointers

while(*a++ = *b++){}其中a和b是有效的char指针。

5 个答案:

答案 0 :(得分:11)

如果b是一个10个字符的空终止字符串,而a是一个已经分配了4个字符的缓冲区,那么你将使用上面的代码在已分配的内存之外写入。

答案 1 :(得分:7)

一个替代答案:

char *a = "Hello";
char *b = "World";

这些都是有效的char指针。但是a并没有指出可写的记忆。

答案 2 :(得分:3)

指向的字符串可能不会以空值终止,这意味着数据正在被读取并分配给它应该无法访问的内存,因此违规。

答案 3 :(得分:1)

看起来为数组'a'分配的内存小于数组'b'的长度。

答案 4 :(得分:0)

如果您在MSDev上运行它,请在调试器中将其打包并逐步执行,和/或查看存储a和b的实际内存区域,并直接查看正在进行的操作。它可能是已经提到过的任何可能性。