永发信息网

怎样改变这个函数的指针值?

答案:5  悬赏:20  手机版
解决时间 2021-03-16 07:32
这个函数:
char* changeStr(char* str)
{
*str[0]='t';
}
void main()
{
char* p="abcdefg";
changeStr(p);
cout<<p<<endl;
}
运行时会发生内存溢出,我怎样改才不会内存溢出?
内存溢出是不是指堆内存溢出?
最佳答案
char* p="abcdefg"; 定义的是字符串常量

所以"abcdefg"是分配在一个专门的静态区域上的, 无论你加不加const, 你向它写入内容都会造成内存访问违规.

这里内存溢出是你操作了不该操作的内存地址。
全部回答
把函数中*str[0]='t';改成str[0]='t';return str; 内存溢出这里指的是栈溢出。
因为你修改的是链表的头指针在这个函数中的局部副本。。。不是位于父函数中的那个真正的头指针。 只有把一个指针传递给头指针,才能把父函数里的头指针修改为指向新头元素。程序改为如下即可: int insert(lnode **head) {  lnode *newelem;  newelem = (lnode*)malloc(sizeof(lnode));  if(!newelem)return 0;  newelem->next = *head;  *head = newelem;  return 1; }
你可以写成 char p[] = "abcdefg"; 这样会开辟一块空间把字符串赋值进去就可以改了。 Windows中字符串常数储存的位置是只读的,并不是发生了溢出。
char* p="abcdefg"; changeStr(p); p指向的常量地址,其值是不能改变的,除非先改变他的地址,如 void changeStr(char* &str) { str=&("t"); } void main() { char* p="abcdefg"; changeStr(p); cout<<p<<endl; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
新买了手机,但发不了短信
西湖花园北院南门地址在哪,我要去那里办事
中国电信4G套餐
看图猜成语:一狗头一唇印一马一嘴巴
老三星手机我想把每个数字键设置一个号码,便
关于处心积虑的成语故事
手机软件转存到SD卡里以后内存空间为什么和以
孕妇到底可不可以吃酒酿小圆子
x减三分之x减二分之x等于15
为什么蒸发结晶后剩余溶液、溶质、溶剂的质量
盐场堡镇大头羊场在哪里啊,我有事要去这个地
保定市里哪有卖卷烟器和好烟丝的!把地址写清
刷淘宝收藏真的能让淘宝店铺排名靠前吗
唐人快餐在什么地方啊,我要过去处理事情
农民合作社未来的发展趋势是怎么样的
推荐资讯
黑魂3的服务器挂了?是要更新么
才子骂小花中的那个DJ版的脱掉 我在摆渡和哭
黄子韬在团里和谁的关系好
朋友坚决跟我合租房子,但是我不想合租该怎么
mfc9320cw怎样连接无线网络
一男一女光着屁股在床上(打一民族)
QQ发的语音怎么重新接受阿
与金戈铁马相近的词语
绝味鸭脖五星路店地址在哪,我要去那里办事
大话2五行对人法命中的影响拜托各位了 3Q
x的4次方-5x的平方-36=0
如何把在本地磁盘C的游戏软件转载在别的本地
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?