我已经在我的.h文件中声明了一个结构:
struct node{
char* string;
}
我打算创建一个结构,例如,一个成员,一个名为string的字符指针。
现在,我弄清楚字符串是多长时间,malloc是一个合适大小的数组,用它来输入。
char* test;
test = (char*) malloc( n * sizeof(char) );
就我所知,这已经创建了字符指针测试,并指定它指向我刚刚malloc'd的数组的头部。然后我继续将每个数组槽分配给用户输入的字符,然后我将其读出来 - 这一切都编译并正常工作。当我尝试将此字符指针分配给传递给此结构的结构节点中的字符指针时,我的问题出现了:
int f1( struct node* new ){
所以我尝试将结构中的指针分配给指向数组的指针的值,如下所示:
new->string = test;
但我是段错误。
对我来说,这似乎是我要为一个期待char *的东西分配一个char *所以这应该工作得很好......我可能错过了一些愚蠢的东西,但有没有人有指示我的方向?非常感谢!
答案 0 :(得分:3)
检查f1()
的来电者并确保您的参数有效。
这将有效:
struct node *you = malloc(sizeof(struct node));
if (you)
{
f1(you);
free(you);
}
就像这样:
struct node me;
f1(&me);
这不起作用
struct node *me;
int f1(me);
答案 1 :(得分:0)
需要注意的一些观察结果:
sizeof(char)
是一个。
调用malloc
的推荐方法是避免强制转换以及获取sizeof以从正在分配的指针推断类型。 (见下文)
避免使用new
等名称作为您的标识符(尽可能使用)。
完成后,请free
string
node
成员。
详细说明#2,见下文 -
struct MyType *foo;
foo = malloc( n * sizeof *foo ); /* allocate n elements where n > 0 */
出于某种原因,如果您选择foo为其他类型,那么malloc
电话就不用担心。此外,如果您忘记包含stdlib.h,编译器会让您知道它。