此代码是更大程序的一部分。我想创建一个结构数组。该结构包含两种数据类型:T
和char
,每种都获得用户的输入。我是一个新手,无法通过这个找到我的方式。请帮忙。
生成错误:分段错误11。
char*
答案 0 :(得分:2)
你使用arr作为分配的内存,但是你将它分配给添加的返回值,此时内存丢失,你的内存泄漏。
在add函数中,返回一个指向具有自动存储的变量的指针,该函数在函数返回后不存在。这就是你遇到段错误的原因。
所以我会在add函数中分配struct,并返回它:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
char ch;
char str[20];
} Item;
Item* add(char* str, char ch);
int main(int argc, char const *argv[]){
int i;
int n = 3; // number of elements in the array
Item** arr = malloc(n * sizeof(Item*));
arr[0] = add("cap", 'k');
arr[1] = add("foo", 'i');
arr[2] = add("bar", 'j');
printf("%c\n", arr[0]->ch );
printf("%s\n", arr[0]->str );
for (i = 0; i < n; i++)
free(arr[i]);
free(arr);
return 0;
}
Item* add(char* str, char ch) {
Item *i = malloc(sizeof *i);
strcpy(i->str, str);
i->ch = ch;
return i;
}