我试图在Windows上运行一段代码,而在Linux上运行的是同一段代码。 虽然它在Windows上运行良好,但它在linux中给了我一个分段错误。我知道在这段代码中,我分配的内存正在浪费,但是有人可以澄清为什么linux在Windows没有时出错。字符指针分段错误
char *ptr=(char*)malloc(sizeof(2*10));
ptr="harsh";
printf("%s\n",ptr);
我试图在Windows上运行一段代码,而在Linux上运行的是同一段代码。 虽然它在Windows上运行良好,但它在linux中给了我一个分段错误。我知道在这段代码中,我分配的内存正在浪费,但是有人可以澄清为什么linux在Windows没有时出错。字符指针分段错误
char *ptr=(char*)malloc(sizeof(2*10));
ptr="harsh";
printf("%s\n",ptr);
此代码本身并不全部分段。最有可能是在其他地方有一个错误覆盖字符串“苛刻”使用的内存(所以printf将崩溃)或覆盖维护堆的数据结构(所以malloc将崩溃)
这些类型的问题是与初学程序员相同,并在不同的环境中导致不同的问题。由于此程序中的3行中有2行似乎有与内存相关的错误,因此似乎很可能。
C++程序员必须学习的最重要的事情之一就是非常害怕这些类型的错误。这就是为什么在现代C++中,我们总是使用RAII和集合类来确保这些问题不会发生。
“* ... C++程序员... *”这是一个C问题,不是吗? – alk
啊,所以它是...... C程序员,不幸的是,没有这些工具可用,并且必须始终保持警惕。 –
除了这段代码中的内存泄漏之外,我没有看到任何问题,但是在'ptr =“harsh”;'之后不要执行'free(ptr);''。 – MikeCAT
plz发布整个程序代码 – Haris
您分配int的大小。为什么? – ameyCU