由于使用指向结构的指针的函数,for 循环意外中断
Posted
技术标签:
【中文标题】由于使用指向结构的指针的函数,for 循环意外中断【英文标题】:for loop unexpectedly breaks due to a function which uses pointer to a structure 【发布时间】:2021-11-23 18:48:26 【问题描述】:每当我尝试在 c 中使用以下代码时,for 循环在一次迭代后就会中断,我无法弄清楚究竟是为什么。如果不使用 for 循环,那么它工作正常,我做了测试。请帮忙。
#include<stdio.h>
#include<stdlib.h>
struct stack
int top;
int n;
char *arr;
;
void push(struct stack *ptr,char x);
int main()
struct stack chs;
struct stack *ptr;
ptr = &chs;
ptr->top=-1;
printf("enter the size of stack: ");
scanf("%d",&ptr->n);
int size = ptr->n;
for(int i=0 ; i < size ; i++)
printf("test iteration ");
push(ptr,'a');
return 0;
void push(struct stack *ptr,char x)
if(ptr->top >= (ptr->n-1))
printf("\nstack overflow\n");
return;
else
ptr->top = (ptr->top) + 1;
ptr->arr[(ptr->top)] = x;
【问题讨论】:
结构的char *arr
元素未初始化,因此ptr->arr[(ptr->top)]
是未定义的引用。那时的行为是未定义的。
【参考方案1】:
如评论中所述,成员 arr
从未初始化为指向任何内容。您可以通过将代码修改为以下内容来解决问题:
#include<stdio.h>
#include<stdlib.h>
struct stack
int top;
int n;
char *arr;
;
void push(struct stack *ptr,char x);
int main()
struct stack chs;
struct stack *ptr;
ptr = &chs;
ptr->top=-1;
printf("enter the size of stack: ");
scanf("%d",&ptr->n);
int size = ptr->n;
char chs_arr[size]; // Variable-sized array based on input
ptr->arr = chs_arr; // Set pointer member arr to point to array created.
for(int i=0 ; i < size ; i++)
printf("test iteration ");
push(ptr,'a');
return 0;
void push(struct stack *ptr,char x)
if(ptr->top >= (ptr->n-1))
printf("\nstack overflow\n");
return;
else
ptr->top = (ptr->top) + 1;
ptr->arr[(ptr->top)] = x;
【讨论】:
以上是关于由于使用指向结构的指针的函数,for 循环意外中断的主要内容,如果未能解决你的问题,请参考以下文章