以下代码给出了分段错误

时间:2017-03-25 08:07:39

标签: c++

我正在尝试执行以下代码,这会给我分段错误。我正在做什么错误或者我错过了什么部分?这段代码可以用其他方式实现吗?

代码:

list1 = [1,2,3]

if (condition):
    for i in list1:
        print(i)

3 个答案:

答案 0 :(得分:4)

您没有初始化127.0.0.1 localhost 127.0.1.1 debian 45.79.1.236 foo foo.pro # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters 指向x的指针,所以最初它指向内存中未分配的某个未定义区域。

通过执行struct A,您正在尝试编写此空间,从而导致分段错误。

您可以更改

x->a = "soumya";

struct A *x;

struct A *x = malloc(sizeof(struct A));
// Don't forget to free this memory if your program is going to run for some time

并将struct A x; 替换为x->a,在这种情况下,内存将在堆栈中分配,以便在方法结束时自动释放。

答案 1 :(得分:2)

我们需要涵盖几个问题。

1)一般来说,不再使用C ++中的原始指针。

2)你实际上没有为*x分配任何内存。这可以通过以下方式实现:

struct A *x = new A;

请记住调用delete x,以便在适当时释放内存。

第三个问题是您没有为x->a的内容分配内存。最好的解决方案是使用std::string而不是char指针。 然后你可以x->a = "soumya";

你的结构应该是

struct A {
    std::string a;
};

答案 2 :(得分:1)

以下是更正后的版本:

使用const char *,因为您指定了常量字符串

使用struct A x;分配struct,而不仅仅是指向未分配内存的指针。

#include <iostream>
#include "string.h"
using namespace std;
struct A {
    const char* a;
};
int main()
{
    struct A x;
    x.a = "soumya";
    const char* str = "soumya";
    cout<<str<<endl<<x.a<<endl;

    return 0;
}