2014-11-25 52 views
-1

我有一个结构,我想malloc()在struct 1D数组中,但它不让我。这是我的结构。结构中的malloc 1D数组

//n = blabla 

struct memory { 

    int *results; 
    results = malloc(n * sizeof(int));  
    int side; 

} *pmemOUT; 

错误是“期望的说明符 - 限定词列表之前的结果”,但我真的不明白这意味着什么。我在互联网上看到,这个错误意味着我在声明它之前使用了一些东西,但我仍然不明白什么是错的。

+0

欢迎堆栈溢出。请尽快阅读[关于]页面。另外请注意,您应该决定是否编写C或C++代码,因为根据您使用的是哪种语言,答案是不同的。如果你用C编写,那么你就不能把可执行代码放在结构定义的中间。如果你正在编写C++,你不应该首先使用'malloc()'(而是使用'new'),并且分配将在一个构造函数中完成,并带有一个参数告诉你要分配多少个元素并且您应该记录分配了多少元素)。 – 2014-11-25 03:28:45

回答

2

你不能在结构体内部分配内存(事实上,除了struct声明中的成员类型声明外你不能有任何语句)。既可以使用一个构造(C++),或分配存储器的结构声明外results指针,像

// this statement must be outside the struct definition 
pmemOUT->results = malloc(n* sizeof(int)); 

实施例:

#include <stdio.h> 
#include <stdlib.h> 

int n = 16; 
struct memory { 
    int *results; 
    int side; 
} *pmemOUT; 

int main() 
{ 
    pmemOUT = (struct memory*)malloc(sizeof(struct memory)); /* allocate memory for the struct */ 
    pmemOUT->results = (int*)malloc(n * sizeof(int)); /* allocate memory for its member */  
    pmemOUT->results[0] = 10; /* assign something */ 
    printf("%d\n", pmemOUT->results[0]); /* test that it worked */ 

    return 0; 
} 
+0

所以结果仍然作为一个数组。我只是在结构体外分配内存。对? – prokiz 2014-11-25 02:18:16

+0

是的,'results'是一个指针(因此它的行为就像一个数组),并且你只需在结构体中声明它。然后你在外面分配它的内存。 – vsoftco 2014-11-25 02:29:28

+0

以及如何更改此成员的值?我的意思是pmemOUT-> results [0] =值是错误的。 – prokiz 2014-11-25 02:34:27