【问题标题】:malloc 1D array in structmalloc 结构中的一维数组
【发布时间】:2014-11-25 02:12:06
【问题描述】:

我有一个结构,我想在结构中 malloc() 一个一维数组,但它不允许我这样做。这是我的结构。

//n = blabla

struct memory {

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

} *pmemOUT;

错误是“'结果'之前的预期说明符限定符列表”,但我真的不明白这意味着什么。我在网上看到这个错误意味着我在声明之前使用了某些东西,但我仍然无法理解问题所在。

【问题讨论】:

  • 欢迎来到 Stack Overflow。请尽快阅读About 页面。另外,请注意,您应该决定是编写 C 代码还是 C++ 代码,因为答案因您使用的语言而异。如果您使用 C 语言编写,那么您根本无法将可执行代码放在这样的结构定义的中间。如果你正在编写 C++,你不应该首先使用malloc()(改用new),并且分配将在构造函数中完成,参数告诉你要分配多少元素(你也应该记录分配了多少元素)。

标签: c++ c arrays struct malloc


【解决方案1】:

你不能在结构体内部分配内存(事实上,除了结构体声明中的成员类型声明之外,你不能有任何语句)。要么使用构造函数 (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;
}

【讨论】:

  • 因此 results 仍然作为数组工作。我只是在结构之外分配内存。对吗?
  • 是的,results 是一个指针(因此它的行为类似于一个数组),您只需在结构中声明它即可。然后你在外面分配它的内存。
  • 我怎样才能改变这个成员的价值?我的意思是 pmemOUT->results[0] = value 是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 2011-07-24
  • 2021-05-13
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
相关资源
最近更新 更多