写入位置时发生訪问冲突

原因总结:

1:使用了未初始化的指针(未给指针分配空间)

2:使用了已经删除的指针

3.char str[]="ABCD"。这个数组的存储空间是在栈中开辟的(在栈中开辟了一个数组?)

char *str="ABCD"。str指向的是静态存储区,"ABCD"是位于常量区的,指针str仅仅是指向了这个位置(仅仅在栈中开辟了一个指针内存?),那么这些值就不能被改动。

而上面数组中,要注意的是把字符拷贝到数组的元素中。那么就是能够被随意改动的。

例:

char* str = "ABCD"; //char str[] = "ABCD";能够解决
strrev(str);
char * strrev(char str[]){
int j, i;
for(i = 0, j = strlen(str) - 1; i < j; i++, j--){
char tmp = str[i];
str[i] = str[j];//写入位置时发生冲突
str[j] = tmp;
}
return str;
}

分析:

程序代码区:

 1 //main.cpp
 2 int a=0;    //全局初始化区
 3 char *p1; //全局未初始化区
 4 main()
 5 {
 6     int b;                  //栈
 7     char s[]="abc";  //栈
 8     char *p2;           //栈
 9     char *p3="123456";   //123456\0在常量区,p3在栈上。
10     static int c=0;     //全局(静态)初始化区
11     p1 = (char*)malloc(10);
12     p2 = (char*)malloc(20);   //分配得来得10和20字节的区域就在堆区。
13     strcpy(p1,"123456");   //123456\0放在常量区,编译器可能会将它与p3所向"123456"优化成一个地方。
14 }

存取效率的比較

char s1[]="aaaaaaaaaaaaaaa";

char *s2="bbbbbbbbbbbbbbbbb";

aaaaaaaaaaa是在执行时刻赋值的;而bbbbbbbbbbb是在编译时就确定的;可是,在以后的存取中,在栈上的数组比指针所指向的字符串(比如堆)快。

from:http://blog.csdn.net/pipisorry/article/details/37055183

ref:用递归实现字符串反转http://blog.csdn.net/andysun1986/article/details/6941230

时间: 2024-11-08 09:26:57

写入位置时发生訪问冲突的相关文章

写入位置时发生访问冲突

  写入位置时发生访问冲突 原因总结如下: 1:使用了未初始化的指针(未给指针分配空间) 2:使用了已经删除的指针 总之是指针未初始化以及越界被删除的原因 例: char* str = "ABCD"; //char str[] = "ABCD";可以解决 strrev(str); char * strrev(char str[]){ int j, i; for(i = 0, j = strlen(str) - 1; i < j; i++, j--){ char

验证位置时发生错误:“org.tigris.subversion.javahl.ClientException......

验证位置时发生错 误:“org.tigris.subversion.javahl.ClientException: RA layer request failed svn: Server sent unexpected return value (403 Forbidden) in response to OPTIONS request for 'http://192.168.1.50/svn/products/PD007D1020/changAnCar/' 解决方法: 删除C:\Documen

(转)HttpWebRequest以UTF-8编码写入内容时发生“Bytes to be written to the stream exceed the Content-Length bytes size specified.”错误

from:http://www.cnblogs.com/Gildor/archive/2010/12/13/1904060.html HttpWebRequest以UTF-8编码写入内容时发生“Bytes to be written to the stream exceed the Content-Length bytes size specified.”错误 出错代码如下: request.ContentLength = Encoding.UTF8.GetByteCount(content);

SVN“验证位置时发生错误”的解决办法

验证位置时发生错误:“org.tigris.subversion.javahl.ClientException...... 验证位置时发生错误:“org.tigris.subversion.javahl.ClientException: RA layer request failed svn: Server sent unexpected return value (403 Forbidden) in response to OPTIONS request for 'http://192.168

实战DeviceIoControl 之中的一个:通过API訪问设备驱动程序

P.bhw98 { PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 9pt; PADDING-BOTTOM: 0px; MARGIN: 10px 0px 5px; LINE-HEIGHT: normal; PADDING-TOP: 0px; FONT-FAMILY: Verdana, Arial } PRE.bhw98 { FONT-SIZE: 9pt; PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDIN

PCI、PCIE配置空间的訪问(MCFG,Bus,Device,Funtion)

一般来说,在x86平台上,有两大类方式能够訪问这一区间的寄存器, 1,配置机制1#或者配置机制2# 訪问时借助in/out指令.请注意,这样的方式有别于一般的in/out指令訪问PCI的IO空间,它引入了地址port和数据port. 配置机制2#仅仅在某些特定的主板上被使用. 新的设计应使用配置机制1#来产生配置空间的物理操作.这样的机制使用了两个特定的32位I/O空间,即CF8h和CFCh.这两个空间相应于PCI桥路的两个寄存器,当桥路看到CPU在局部总线对这两个I/O空间进行双字操作时,就将

大数据量高并发訪问的数据库优化方法

????假设不能设计一个合理的数据库模型.不仅会添加client和server段程序的编程和维护的难度,并且将会影响系统实际运行的性能.所以,在一个系统開始实施之前,完备的数据库模型的设计是必须的. ????在一个系统分析.设计阶段.由于数据量较小.负荷较低.我们往往仅仅注意到功能的实现.而非常难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低.这时再来考虑提高系统性能则要花费很多其它的人力物力,而整个系统也不可避免的形成了一个打补丁project. ????所以在考

写入位置 0xcdcdcdcd 时发生访问冲突

写入位置 0xcdcdcdcd 时发生访问冲突 分类: C2012-04-22 21:32 4750人阅读 评论(0) 收藏 举报 c 转载自:http://blog.sina.com.cn/s/blog_672c5a470100nsh1.html 出现这种错误多半是指针未能正确初始化. 在 Debug 模式下, VC 会把未初始化的栈内存全部填成 0xcc,当字符串看就是 烫烫烫烫…… 会把未初始化的堆内存全部填成 0xcd,当字符串看就是 屯屯屯屯…… 可以让我们方便地看出那些内存没初始化

问题解决——使用CriticalSection后 0xXXXXXXXX处最可能的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突

================声明===================== 本文原创,转载请保持文章的完整性(含本声明),并显要的著名作者和出处. 本文链接:http://blog.csdn.net/wlsgzl/article/details/42003487 ========================================= 电脑有一个SSD和一个HHD,SSD只有一个分区做系统盘,HHD分4个区:D.E.F.G.其中D盘放工程代码. 还原电脑的时候,诺顿抽风,把HHD的