#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct student{ int age; char *name;} sst;typedef int Age;//typedef struct student sst;int main(){ int i,j;// sst **c; sst ** c = (sst **)calloc(3,sizeof(sst *)); for(i=0;i<3;i++){ c[i]=(sst *)calloc(4,sizeof(sst)); } for( i=0;i<3;i++){ for( j=0;j<4;j++){ strcpy(c[i][j].name,"ffff"); c[i][j].age=i*j; } } for(i=0;i<3;i++){ for(j=0;j<4;j++){ printf("%d\t%s\n",c[i][j].age,c[i][j].name); } free(c[i]); } free(c); return 0;}
为啥总给自己挖坑呢.
要不就直接整成数组
typedef struct student{ int age; char name[16];} sst;
要不如果不改名就直接指向.
typedef struct student{ int age; const char *name;} sst;c[i][j].name = "ffff";
混着来那是要出错误的.
你并没有为 c[i][j].name
分配空间
嗯,此segmentfault并非彼segmentfault。
通常情况下,出现 "Segmentation fault"(段错误)的原因通常是由于程序访问了无效的内存。在你的代码中,可能的原因是对字符串指针 name 没有进行动态内存分配。
具体来说,在 sst 结构体中,你定义了一个指向字符的指针 name,但是没有为它分配内存。在使用 strcpy 函数将字符串复制到 name 指向的内存时,会导致段错误。
所以,给sst 结构体中的 name 字符指针分配内存。可以使用 malloc 或 calloc 函数来分配足够的内存。
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct student { int age; char *name;} sst;int main() { int i, j; sst **c = (sst **)calloc(3, sizeof(sst *)); for (i = 0; i < 3; i++) { c[i] = (sst *)calloc(4, sizeof(sst)); for (j = 0; j < 4; j++) { c[i][j].name = (char *)malloc(sizeof(char) * 10); // 假设每个名字最大长度为 10 strcpy(c[i][j].name, "ffff"); c[i][j].age = i * j; } } for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) { printf("%d\t%s\n", c[i][j].age, c[i][j].name); free(c[i][j].name); } free(c[i]); } free(c); return 0;}
这样就解决了。
我不明白为什么< code>gcc -S -m32会产生这些特定的代码行: C 代码: 它给出以下输出:
需求:实现将数组中所有元素调整为左右两部分,左边为奇数,右边为偶数。(c语言) 中这段代码: 能不能换成一下这个? 想问问为什么可换/为什么不能换? 谢谢指导,菜鸟万分感激。
本文向大家介绍请介绍一下什么是生产者消费者模式?相关面试题,主要包含被问及请介绍一下什么是生产者消费者模式?时的应答技巧和注意事项,需要的朋友参考一下 生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。 优点:支持并发、解耦。
我观察到库函数,当它在循环中被调用一次时,它几乎总是产生正数。
本文向大家介绍请你来说一下什么时候会发生段错误?相关面试题,主要包含被问及请你来说一下什么时候会发生段错误?时的应答技巧和注意事项,需要的朋友参考一下 段错误通常发生在访问非法内存地址的时候,具体来说分为以下几种情况: 使用野指针 试图修改字符串常量的内容
当我评论tx:annotation-drive时,一切都很好,但是带有@transactional注释的method不起作用。我做错了什么? 我的年级依赖关系: