2015-11-01 80 views
-1

我试图在Windows上运行一段代码,而在Linux上运行的是同一段代码。 虽然它在Windows上运行良好,但它在linux中给了我一个分段错误。我知道在这段代码中,我分配的内存正在浪费,但是有人可以澄清为什么linux在Windows没有时出错。字符指针分段错误

char *ptr=(char*)malloc(sizeof(2*10)); 
ptr="harsh"; 
printf("%s\n",ptr); 
+3

除了这段代码中的内存泄漏之外,我没有看到任何问题,但是在'ptr =“harsh”;'之后不要执行'free(ptr);''。 – MikeCAT

+0

plz发布整个程序代码 – Haris

+2

您分配int的大小。为什么? – ameyCU

回答

1

此代码本身并不全部分段。最有可能是在其他地方有一个错误覆盖字符串“苛刻”使用的内存(所以printf将崩溃)或覆盖维护堆的数据结构(所以malloc将崩溃)

这些类型的问题是与初学程序员相同,并在不同的环境中导致不同的问题。由于此程序中的3行中有2行似乎有与内存相关的错误,因此似乎很可能。

C++程序员必须学习的最重要的事情之一就是非常害怕这些类型的错误。这就是为什么在现代C++中,我们总是使用RAII和集合类来确保这些问题不会发生。

+0

“* ... C++程序员... *”这是一个C问题,不是吗? – alk

+0

啊,所以它是...... C程序员,不幸的是,没有这些工具可用,并且必须始终保持警惕。 –