我试图在Windows上运行一段代码,在Linux上运行相同的代码。 虽然它在Windows上运行良好,但它在linux中给了我一个分段错误。我知道在这段代码中我分配的内存已经浪费了,但有人可以澄清为什么linux在Windows时没有出错。
char *ptr=(char*)malloc(sizeof(2*10));
ptr="harsh";
printf("%s\n",ptr);
答案 0 :(得分:1)
此代码本身不会发生段错误。很可能在其他地方有一个错误覆盖了字符串使用的内存"苛刻" (因此printf将崩溃)或覆盖维护堆的数据结构(因此malloc将崩溃)
这些问题在初学程序员中很常见,并且在不同的环境中会导致不同的问题。由于该程序中有3行中有2行似乎存在与内存相关的错误,因此很可能。
C ++程序员必须学习的最重要的事情之一是非常害怕这些类型的错误。这就是为什么在现代C ++中,我们总是使用RAII和集合类来确保这些问题不会发生。