编译错误,求大家帮帮忙

zqdreamer 2014-07-09 03:57:11
这个代码功能是实现单词翻转顺序,例如i am a student.---> student. a am i
但在编译中发生错误,试了很久,不知道具体原因是什么,求大家帮帮忙。
void reverse(char *pBegin, char *pEnd){
if(pBegin == NULL || pEnd == NULL)
return;
while(pBegin < pEnd){
char temp = *pBegin;
*pBegin = *pEnd; //编译到这地方失败,0xC0000005: 写入位置 0x0087DCAC 时发生访问冲突。
*pEnd = temp;
pBegin++;
pEnd--;
}
}
char* reverseSentence(char *pData){
if(pData == NULL)
return NULL;;
char *pBegin = pData;
char *pEnd = pData;
while(*pEnd!='\0') pEnd++;
pEnd--;
//旋转句子
reverse(pBegin,pEnd);
//旋转单词
pBegin = pData;
pEnd = pData;
while(*pBegin !='\0'){
if(*pBegin == ' '){
pBegin++;
pEnd++;
}else if(*pEnd == '\0' || *pEnd == ' '){
reverse(pBegin,--pEnd);
pBegin = ++pEnd;
}else{
pEnd++;
}
}
return pData;
}
...全文
184 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqdreamer 2014-07-10
  • 打赏
  • 举报
回复
感谢@赵四老师的回答,永远是那么快。感谢@u012370521,运行期间的错误。感谢@xdayong,还有其他大神的回答。。 根据大家的回答,发现问题的所在了。在我的代码中char *pStr = "i am a student";是一个常量指针,位于常量区不可修改。所以在运行时修改常量区就崩了。。有两个解决方法:1.是赵4老师提出的加#pragma comment(linker,"/SECTION:.rdata,RW"),让常量区可写,这有点危险。2.是xdayong提出的,将pStr定义为 char pStr[] = "i am a student."。 再次感谢大家的回答。。。
xdayong 2014-07-10
  • 打赏
  • 举报
回复
char*p="i am a student";这句有问题 char p[]="i am a student";
赵4老师 2014-07-10
  • 打赏
  • 举报
回复
引用 8 楼 xdayong 的回复:
,赵4老师在害人啊
冲破某些限制,对自己有时有害处,有时有好处。
xdayong 2014-07-10
  • 打赏
  • 举报
回复
,赵4老师在害人啊
赵4老师 2014-07-10
  • 打赏
  • 举报
回复
#pragma comment(linker,"/SECTION:.rdata,RW")
//加这句可以让常量区可写,后果自负!
hokuhouhi 2014-07-10
  • 打赏
  • 举报
回复
void main() { char*p="i am a student"; cout<<p<<endl; cout<<"翻转后为"; reverseSentence(p); } 换成char p[] = "i am a student"; cout<<"翻转后为"; reverseSentence(p); cout<<p<<endl; /*加上这一句*/
IT保安 2014-07-09
  • 打赏
  • 举报
回复
main 里面 reverseSentence(p); 这个少了cout <<,其他看不出来,留个记号,等着大神!
softee 2014-07-09
  • 打赏
  • 举报
回复
*pBegin = *pEnd; //编译到这地方失败,0xC0000005: 写入位置 0x0087DCAC 时发生访问冲突 ++++++++++++++++++ 应该是pBegin=pEnd吧。
没事人 2014-07-09
  • 打赏
  • 举报
回复
char temp = *pBegin;感觉这句也不正确啊
是宝啊 2014-07-09
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
void reverse(char *pBegin, char *pEnd)

{
    if(pBegin==NULL || pEnd==NULL)
        return;
    while(pBegin < pEnd)
	{
        char temp = *pBegin;
        *pBegin = *pEnd;   //编译到这地方失败,0xC0000005: 写入位置 0x0087DCAC 时发生访问冲突。
        *pEnd = temp;
        pBegin++;
		pEnd--;
    }
}
char* reverseSentence(char *pData)
{
	if(pData==NULL)
		return NULL;
	char *pBegin = pData;
	char *pEnd = pData;
	while(*pEnd!='\0') 	
		pEnd++;
	pEnd--;
	//旋转句子
	reverse(pBegin,pEnd);
	//旋转单词
	pBegin = pData;
	pEnd = pData;
	while(*pBegin !='\0')
	{
		if(*pBegin == ' ')
		{
			pBegin++;
			pEnd++;
		}
		else if(*pEnd == '\0' || *pEnd == ' ')
		{
			reverse(pBegin,--pEnd);
			pBegin = ++pEnd;
		}
		else
		{
			pEnd++;
		}
	}
	return pData;
}
void main()
{
	char*p="i am a student";
	cout<<p<<endl;
	cout<<"翻转后为";
	reverseSentence(p);
}
略试了下,编译木错,但运行时崩溃了,且无法输出翻转后的结果
赵4老师 2014-07-09
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧