这个函数:
char* changeStr(char* str)
{
*str[0]='t';
}
void main()
{
char* p="abcdefg";
changeStr(p);
cout<<p<<endl;
}
运行时会发生内存溢出,我怎样改才不会内存溢出?
内存溢出是不是指堆内存溢出?
怎样改变这个函数的指针值?
答案:5 悬赏:20 手机版
解决时间 2021-03-16 07:32
- 提问者网友:欲望失宠
- 2021-03-15 09:50
最佳答案
- 五星知识达人网友:持酒劝斜阳
- 2021-03-15 10:58
char* p="abcdefg"; 定义的是字符串常量
所以"abcdefg"是分配在一个专门的静态区域上的, 无论你加不加const, 你向它写入内容都会造成内存访问违规.
这里内存溢出是你操作了不该操作的内存地址。
所以"abcdefg"是分配在一个专门的静态区域上的, 无论你加不加const, 你向它写入内容都会造成内存访问违规.
这里内存溢出是你操作了不该操作的内存地址。
全部回答
- 1楼网友:上分大魔王
- 2021-03-15 14:15
把函数中*str[0]='t';改成str[0]='t';return str;
内存溢出这里指的是栈溢出。
- 2楼网友:冷風如刀
- 2021-03-15 13:55
因为你修改的是链表的头指针在这个函数中的局部副本。。。不是位于父函数中的那个真正的头指针。
只有把一个指针传递给头指针,才能把父函数里的头指针修改为指向新头元素。程序改为如下即可:
int insert(lnode **head)
{
lnode *newelem;
newelem = (lnode*)malloc(sizeof(lnode));
if(!newelem)return 0;
newelem->next = *head;
*head = newelem;
return 1;
}
- 3楼网友:七十二街
- 2021-03-15 12:51
你可以写成 char p[] = "abcdefg"; 这样会开辟一块空间把字符串赋值进去就可以改了。
Windows中字符串常数储存的位置是只读的,并不是发生了溢出。
- 4楼网友:七十二街
- 2021-03-15 12:07
char* p="abcdefg";
changeStr(p);
p指向的常量地址,其值是不能改变的,除非先改变他的地址,如
void changeStr(char* &str)
{
str=&("t");
}
void main()
{
char* p="abcdefg";
changeStr(p);
cout<<p<<endl;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯