gpt4 book ai didi

c - c程序中的段错误

转载 作者:太空狗 更新时间:2023-10-29 17:21:47 25 4
gpt4 key购买 nike

只是为了测试,我创建了以下代码:

#include<stdio.h>

int main(){
char *p = "Hello world";
*(p+1) = 'l';
printf("%s", p);
return 0;
}

但是当我在 ubuntu 10.04 下运行我的“gcc”编译器时,我得到:

Segmentation fault

那么谁能解释为什么会这样。

#include<stdio.h>
#include<stdlib.h>

int main(){
char *p = malloc(sizeof(char)*100);
p = "Hello world";
*(p+1) = 'l';
printf("%s", p);
free(p);
return 0;
}

这也会导致段错误提前致谢

最佳答案

char *p = "Hello world"; *(p+1) = 'l';

修改字符串文字(即代码中的“Hello World”)的内容是未定义行为。

ISO C99(第 6.4.5/6 节)

It is unspecified whether these arrays are distinct provided their elements have the appropriate values. If the program attempts to modify such an array, the behavior is undefined.

尝试使用字符数组。

char p[] = "Hello World";
p[1] = 'l';

编辑

你修改后的代码

#include<stdio.h>
#include<stdlib.h>
int main()
{
char *p = malloc(sizeof(char)*100);
p = "Hello world"; // p now points to the string literal, access to the dynamically allocated memory is lost.
*(p+1) = 'l'; // UB as said before edits
printf("%s", p);
free(p); //disaster
return 0;
}

也会调用未定义行为,因为您正在尝试释放尚未使用 malloc 分配的内存部分(使用 free)

关于c - c程序中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4416698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com