c - 在 C 中生成随机数组时出现段错误和未初始化的数据

标签 c arrays segmentation-fault

#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#define len 10

int *randomArray(void);

int main()
{
    srand(time(NULL));
    int *rArray = (int *)malloc(sizeof(int) * len);
    rArray = randomArray();
    for (int i = 0; i < len; i++) {
        printf("%d ", *(rArray+i));
    }
    puts("");
    free(rArray);
}

int *randomArray(void)
{
    int array[len] = { 0 };
    for (int i = 0; i < len; i++) {
        array[i] = rand() % len;
    }
    return array;
}

任务是创建一个 int 的数组s 并有一个函数用随机数填充该数组。函数randomArray()工作得很好,但由于某种原因分配 rArray = randomArray()尽管 rArray 的某些元素无法正常工作是有效数字而不是乱码。另外,最后一条主线free(rArray);使程序崩溃,这让我感到 NumPy ,没有任何意义。如果我删除该行,程序不会崩溃,但我们都知道您需要 free()一个malloc() -ed 数组。

最佳答案

这里的主要问题是,arrayrandomArray() 函数作用域中的局部变量。一旦函数返回,返回的地址就会无效。任何进一步尝试使用内存都将导致 undefined behavior .

此外,从您的方法来看,您试图通过函数调用返回的地址覆盖分配的内存,这将导致内存泄漏。相反,更改您的设计,将分配的内存作为参数传递给函数,然后使用 rand() 调用填充元素。

关于c - 在 C 中生成随机数组时出现段错误和未初始化的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52072267/

相关文章:

c - C 中不进行强制转换的指针的整数

arrays - 如何计算数组数组的 `false` 个元素

c - c中char数组的段错误

c - 如何从 C 控制 Lua 脚本(暂停、恢复、终止)?

c - 8 位输入给出奇怪的行为,因为 16/32 位给出小端/大端

c++ - 使用迭代和递归的二进制搜索算法

c - 段错误--信号 11

python - scipy bisplrep 段错误(核心转储)

c - 仅删除链表中最后一个节点旁边的不存在的节点会终止程序

java - 对数组使用 if 语句