结构指针 #包括 INTC; int main() { 结构abc{ int*a; char*ch[10]; }; 结构abc obj1; 结构abc*obj; obj=&obj1; 扫描频率(“%d”,obj->a); printf(“\nY”); scanf(“%s”,&obj->ch); printf(“\nY”); 返回0; }
我正在fedora上使用VIM编辑器和Gcc编译器。。 我得到了一个分段错误(内核转储???)//这是什么意思???“分段错误”意味着你的程序试图访问不允许访问的内存。您的程序有几个指针和初始化错误 我想您希望数组是结构指针 #包括 INTC; int main() { 结构abc{ int*a; char*ch[10]; }; 结构abc obj1; 结构abc*obj; obj=&obj1; 扫描频率(“%d”,obj->a); printf(“\nY”); scanf(“%s”,&obj->ch); printf(“\nY”); 返回0; },c,C,我正在fedora上使用VIM编辑器和Gcc编译器。。 我得到了一个分段错误(内核转储???)//这是什么意思???“分段错误”意味着你的程序试图访问不允许访问的内存。您的程序有几个指针和初始化错误 我想您希望数组是char-ch[10],而不是char*ch[10]。您还需要更改scanf()调用以匹配:scanf(“%s”,obj->ch) 这同样适用于a字段。它可能不是指针,您应该将指针传递到scanf(): “分段错误”表示您的程序试图访问不允许访问的内存。您的程序有几个指针和初始化错误
char-ch[10]
,而不是char*ch[10]
。您还需要更改scanf()
调用以匹配:scanf(“%s”,obj->ch)代码>
这同样适用于a
字段。它可能不是指针,您应该将指针传递到scanf()
:
“分段错误”表示您的程序试图访问不允许访问的内存。您的程序有几个指针和初始化错误
我想您希望数组是char-ch[10]
,而不是char*ch[10]
。您还需要更改scanf()
调用以匹配:scanf(“%s”,obj->ch)代码>
这同样适用于a
字段。它可能不是指针,您应该将指针传递到scanf()
:
我得到了一个分段错误(核心转储???//这是什么意思
执行内存访问冲突的变量会导致分段错误
scanf("%d", &obj->a);
scanf("%d",obj->a);
int*a
-struct membera
是一个未初始化的指针,但试图将输入带到它所指向的位置。造成你的错误
scanf("%d", &obj->a);
scanf("%d",obj->a);
现在,您可以为指向位置获取输入
obj->a = malloc(sizeof(int)) ;
对于您执行的输入操作类型,结构定义不需要原始指针-
scanf("%d", &(obj->a) );
请注意两者之间的区别-
struct abc{
int *a; // Change this to int a; or make a point to a valid memory location
char *ch[10]; // Change this to char ch[10]; or initialize it with pointers pointing to a valid memory locations
// and then take input on to pointer pointing location.
};
我得到了一个分段错误(核心转储???//这是什么意思
执行内存访问冲突的变量会导致分段错误
scanf("%d", &obj->a);
scanf("%d",obj->a);
int*a
-struct membera
是一个未初始化的指针,但试图将输入带到它所指向的位置。造成你的错误
scanf("%d", &obj->a);
scanf("%d",obj->a);
现在,您可以为指向位置获取输入
obj->a = malloc(sizeof(int)) ;
对于您执行的输入操作类型,结构定义不需要原始指针-
scanf("%d", &(obj->a) );
请注意两者之间的区别-
struct abc{
int *a; // Change this to int a; or make a point to a valid memory location
char *ch[10]; // Change this to char ch[10]; or initialize it with pointers pointing to a valid memory locations
// and then take input on to pointer pointing location.
};
扩展卡尔的答案:char*ch[10]
创建一个由10个指针组成的数组,指向一个字符。您需要的是一个包含10个字符的数组。扩展卡尔的答案:char*ch[10]
创建一个包含10个字符指针的数组。您需要的是一个10个字符的数组。您的代码调用未定义的行为
你应该有charch[10]编码>并使用预设宽度的scanf以避免溢出
int a ; // Can take input directly to "a"
int *a ; // First "a" must point to a valid memory location that can hold an int
// Then, can take input to "a" pointing location
更多:
该结构被定义为有一个指向int的指针,您永远不会初始化它,因此指向随机位置,因此会写入您不拥有的内存位置,因此UB
。将其切换为局部变量int a
或malloc()
整数。您的代码调用未定义的行为
你应该有charch[10]编码>并使用预设宽度的scanf以避免溢出
int a ; // Can take input directly to "a"
int *a ; // First "a" must point to a valid memory location that can hold an int
// Then, can take input to "a" pointing location
更多:
该结构被定义为有一个指向int的指针,您永远不会初始化它,因此指向随机位置,因此会写入您不拥有的内存位置,因此UB
。请将其切换为局部变量inta
或malloc()
整数。请下次格式化代码。我相信a
字段也可以<在该实例中,code>scanf
将期望地址为整数,并且由于a
本身是指向整数的指针(地址),因此它可以正常工作。但是,除非你有理由这么做,否则最好只做一个int
,然后像你提到的那样传递它的地址。@Shynthriir-它肯定不是这样的<代码>a
是一个指针,但它不指向任何东西!好的,对不起,他必须先为它分配内存。我想说的一点是,将(分配的)指针传递给int或将地址传递给int不应该有什么区别<在该实例中,code>scanf
将期望地址为整数,并且由于a
本身是指向整数的指针(地址),因此它可以正常工作。但是,除非你有理由这么做,否则最好只做一个int
,然后像你提到的那样传递它的地址。@Shynthriir-它肯定不是这样的<代码>a
是一个指针,但它不指向任何东西!好的,对不起,他必须先为它分配内存。我想说的一点是,将(分配的)指针传递给int或将地址传递给int不应该有什么区别。它不应该是scanf(“%d”,obj->a)
a
是一个指针,因此它本身包含一个地址。它不应该是scanf(“%d”,obj->a)
a
是一个指针,因此它本身包含一个地址。