我正在尝试执行以下代码,这会给我分段错误。我正在做什么错误或者我错过了什么部分?这段代码可以用其他方式实现吗?
代码:
list1 = [1,2,3]
if (condition):
for i in list1:
print(i)
答案 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;
}