【问题标题】:Is this correct code for dynamic array allocation in C这是 C 中动态数组分配的正确代码吗
【发布时间】:2013-02-18 02:26:01
【问题描述】:
void dynamicArray(int** num1, int** num2, char*** str, int size)
{
    int i = 0;

    *(num1) = (int*)malloc(sizeof(int) * size);
    *(num2) = (int*)malloc(sizeof(int) * size);

    *(str) = (char**)malloc(sizeof(char*) * size);

    for( i = 0; i < size; i++){
        *(*(str) + i) = (char*)malloc(sizeof(char) *5);
    }

    return;
}

我是否成功地为我的 ***char 正确分配了内存?我正在尝试创建一个二维数组“句子”。我的主程序有问题,我认为这可能是问题所在。

【问题讨论】:

  • 很少需要三重间接,当需要它时,他们通常非常精通指针。我不敢说这里就是这种情况。
  • @WhozCraig 他正在投射malloc()的返回值
  • 感谢您提醒我为什么喜欢 Java。
  • 不,它应该是 int 的大小,我想要一个包含 int 数量的“数组”。
  • 据我所知,语法是正确的。我认为您正在尝试在一个功能中执行多项不相关的任务。例如,您可以创建一个为int 数组分配内存的函数,如果您需要多个数组,只需多次调用它即可。另外,你有什么问题?

标签: c memory dynamic


【解决方案1】:

来自cmets:

我遇到的问题是字符串数组。在另一个函数中,我为每个 *strPtr 分配一个字符串。当我这样做时,它会覆盖它之前的所有值。即 *strPtr = "你" *strPtr + 1 = hi。现在 *strPtr + 0 完全等于 hi。

由于这段代码看起来不错,但你在这里的解释看起来很有趣,我认为你 使用数组是错误的。

*strPtr[1] != *strPtr + 1 
*strPtr[1] == *(strPtr + 1) == strPtr[1][0] 

您应该使用第二行中的一种形式,而不是第一行。

【讨论】:

    猜你喜欢
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2018-10-21
    • 2012-04-04
    • 2021-12-15
    • 2010-09-30
    • 1970-01-01
    相关资源
    最近更新 更多