0

此代码在 cygwin 和 linux 下编译没有错误。但是当我运行它时,它在 cygwin 中运行没有错误,但它在 linux 下核心转储。

有人可以对这些系统的内存管理有所了解,以解释为什么会有不同的行为吗?

#include <stdio.h>
void foo(char *p){
 p[0]='A';
}

void main(){
  char *string ="Hello world!";
  foo(string);
  printf("%s\n", string);
}

感谢您的回答,并且没有定义行为是有道理的,但是我对导致这两种不同的未定义行为的底层系统的差异感兴趣。我想这与他们如何管理内存有关,但寻找熟悉内部结构的人可以解释为什么一个最终崩溃而另一个没有。

4

3 回答 3

1

在 C++ 中,字符串文字不得修改。有了那个指针,这就是你想要做的。

如果你想修改它,你必须像这样声明它:

char string[] = "Hello world!";
于 2013-03-26T02:45:34.107 回答
1

修改 char* 会导致未定义的行为,仅仅因为它不会崩溃,并不意味着它不会。这就是 undefined 的意思,行为是不可预测的,在你的情况下,程序不崩溃也是不可预测的。

于 2013-03-26T02:45:39.287 回答
0

修改常量字符串是未定义的行为。

也请定义main()

int main(void)
{
  //your program
  return 0;
}
于 2013-03-26T02:42:25.813 回答