1

我在 .h 文件中声明了一个结构,如下所示:

struct node{
char* string;
}

我打算创建一个结构,例如,具有一个成员,一个名为 string 的字符指针。

现在,我计算出字符串有多长,然后 malloc 一个适当大小的数组,并用它来输入。

char* test;
test = (char*) malloc( n * sizeof(char) );

据我所知,这已经创建了字符指针测试,并将其分配给我刚刚 malloc 的数组的头部。然后我继续将每个数组槽分配给用户输入的字符,然后我将其读回 - 这一切都可以编译并正常工作。当我尝试将此字符指针分配给传递给此结构的结构节点中的字符指针时,我的问题出现了,如下所示:

int f1( struct node* new ){

所以我尝试将结构中的指针分配给指向数组的指针的值,如下所示:

new->string = test;

但我有段错误。

对我来说,这似乎是我将 char* 分配给期望 char* 的东西,所以这应该可以正常工作......我可能错过了一些愚蠢的东西,但有人有方向指向我吗?非常感谢!

4

2 回答 2

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);
于 2012-11-15T21:44:11.613 回答
0

需要注意的一些观察结果:

  1. sizeof(char)根据定义是一个。

  2. 推荐的调用方式malloc是一种避免强制转换以及获取 sizeof 以从分配的指针推断类型的方法。(见下文)

  3. 避免使用诸如new标识符之类的名称(尽可能)。

  4. 完成后记得给里面freestring成员node

要详细说明#2,请参见下文 -

struct MyType *foo;
foo = malloc( n * sizeof *foo ); /* allocate n elements where n > 0 */

出于某种原因,如果您选择 foo 为其他类型,则该malloc调用将减少您担心的一行。此外,如果您忘记包含 stdlib.h,编译器会通知您。

于 2012-11-15T22:24:24.930 回答