结构体里的动态数组输入问题

hellowukz 2021-02-14 12:43:40
#include <stdio.h> #include <stdlib.h> #define max_size 100 typedef struct { int length; int *arr; }sqlist; int initlist_sq(sqlist num) { num.arr=(int*)malloc(sizeof(int)*(max_size)); if(!num.arr) exit(EXIT_FAILURE); num.length=0; return 0; } int main() { sqlist num; int i,n,flag; flag=initlist_sq(num); if(flag) printf("allocation failed\n");//判断分配内存是否成功 else printf("successful\n"); scanf("%d",&num.length); for(i=0;i<num.length;i++)//问题所在 scanf("%d",&num.arr[i]); return 0; } 假设我们输入length为5,为什么到for循环scanf那里就程序就停止了?输入不了。 我记得在分配内存后是可以把它当做数组来看待的。
...全文
153 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
hellowukz 2021-02-14
  • 打赏
  • 举报
回复
引用 8 楼 真相重于对错的回复:
initlist里面的 num是main里面的副本,在那个函数里的任何操作对于main 里面的num无效
嗯嗯,我把这个给忘记了。谢谢谢谢谢谢~
hellowukz 2021-02-14
  • 打赏
  • 举报
回复
引用 7 楼 qzjhjxj的回复:
[quote=引用 4 楼 weixin_53443263 的回复:][quote=引用 3 楼 qzjhjxj的回复:]修改如下,供参考:
#include <stdio.h>
#include <stdlib.h>
#define max_size 100
typedef struct
{
    int length;
    int *arr;
}sqlist;

int initlist_sq(sqlist &num) //int initlist_sq(sqlist num)
{
    num.arr=(int*)malloc(sizeof(int)*(max_size));
    if(!num.arr)
       exit(EXIT_FAILURE);
    num.length=0;
    return 0;
}

int main()
{
    sqlist num;
    int i,n,flag;
    flag=initlist_sq(num);
    if(flag) printf("allocation failed\n");
    else     printf("successful\n");

    scanf("%d",&num.length);
    for(i=0;i<num.length;i++)
        scanf("%d",&num.arr[i]);
    
    return 0;
 }
你就只是加了个&吧。加了之后连编译都不通过了,而且我们定义的num也不是指向结构体的指针变量吧。[/quote] 我这里是运行通过的,没出现你说的编译问题: 这个初始化int initlist_sq(sqlist num)函数里的num和main()函数里的num是两个不同内存空间,不通过地址让他们产生联系,光值没用啊。[/quote] 我刚刚查了一下,发现你这个参数列表中加的取地址运算符是C++语法的,我这个是C语言的,所以没法直接,我刚刚换成指针就成功了。真心感谢你!
真相重于对错 2021-02-14
  • 打赏
  • 举报
回复
initlist里面的 num是main里面的副本,在那个函数里的任何操作对于main 里面的num无效
qzjhjxj 2021-02-14
  • 打赏
  • 举报
回复
引用 4 楼 weixin_53443263 的回复:
[quote=引用 3 楼 qzjhjxj的回复:]修改如下,供参考:
#include <stdio.h>
#include <stdlib.h>
#define max_size 100
typedef struct
{
    int length;
    int *arr;
}sqlist;

int initlist_sq(sqlist &num) //int initlist_sq(sqlist num)
{
    num.arr=(int*)malloc(sizeof(int)*(max_size));
    if(!num.arr)
       exit(EXIT_FAILURE);
    num.length=0;
    return 0;
}

int main()
{
    sqlist num;
    int i,n,flag;
    flag=initlist_sq(num);
    if(flag) printf("allocation failed\n");
    else     printf("successful\n");

    scanf("%d",&num.length);
    for(i=0;i<num.length;i++)
        scanf("%d",&num.arr[i]);
    
    return 0;
 }
你就只是加了个&吧。加了之后连编译都不通过了,而且我们定义的num也不是指向结构体的指针变量吧。[/quote] 我这里是运行通过的,没出现你说的编译问题: 这个初始化int initlist_sq(sqlist num)函数里的num和main()函数里的num是两个不同内存空间,不通过地址让他们产生联系,光值没用啊。
hellowukz 2021-02-14
  • 打赏
  • 举报
回复
引用 1 楼 真相重于对错的回复:
你的这个内存泄露了
我去网上查了一下内存泄露是指我没用free,不过现在这个不是输入不了的原因吧
hellowukz 2021-02-14
  • 打赏
  • 举报
回复
引用 2 楼 Simple-Soft的回复:
没问题,就等着你输入 ,多按几次回车
不行的,到那里就直接跳出了
hellowukz 2021-02-14
  • 打赏
  • 举报
回复
引用 3 楼 qzjhjxj的回复:
修改如下,供参考:
#include <stdio.h>
#include <stdlib.h>
#define max_size 100
typedef struct
{
    int length;
    int *arr;
}sqlist;

int initlist_sq(sqlist &num) //int initlist_sq(sqlist num)
{
    num.arr=(int*)malloc(sizeof(int)*(max_size));
    if(!num.arr)
       exit(EXIT_FAILURE);
    num.length=0;
    return 0;
}

int main()
{
    sqlist num;
    int i,n,flag;
    flag=initlist_sq(num);
    if(flag) printf("allocation failed\n");
    else     printf("successful\n");

    scanf("%d",&num.length);
    for(i=0;i<num.length;i++)
        scanf("%d",&num.arr[i]);
    
    return 0;
 }
你就只是加了个&吧。加了之后连编译都不通过了,而且我们定义的num也不是指向结构体的指针变量吧。
qzjhjxj 2021-02-14
  • 打赏
  • 举报
回复
修改如下,供参考:
#include <stdio.h>
#include <stdlib.h>
#define max_size 100
typedef struct
{
    int length;
    int *arr;
}sqlist;

int initlist_sq(sqlist &num) //int initlist_sq(sqlist num)
{
    num.arr=(int*)malloc(sizeof(int)*(max_size));
    if(!num.arr)
       exit(EXIT_FAILURE);
    num.length=0;
    return 0;
}

int main()
{
    sqlist num;
    int i,n,flag;
    flag=initlist_sq(num);
    if(flag) printf("allocation failed\n");
    else     printf("successful\n");

    scanf("%d",&num.length);
    for(i=0;i<num.length;i++)
        scanf("%d",&num.arr[i]);
    
    return 0;
 }
Simple-Soft 2021-02-14
  • 打赏
  • 举报
回复
没问题,就等着你输入 ,多按几次回车
真相重于对错 2021-02-14
  • 打赏
  • 举报
回复
你的这个内存泄露了

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧