c - 在c中循环整数数组时出错

标签 c arrays memory-management integer

好吧,我有了我的数组:

unsiged int *arr = (unsigned int*)malloc(200 * sizeof(unsigned int));

这样声明,我编写了一个循环,循环遍历数组的每个元素并调用一个以该元素作为参数的函数,如下所示:

for (size_t i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
    sprintf(buffer, "/proc/%zu/cmdline", arr[i]);
    printf("/proc/%x/cmdline", arr[0]);
    printf("/proc/%zu/cmdline", arr[i]);
    checkIfRunning(buffer);
}

checkIfRunning 函数包含:

void checkIfRunning(char *filepath) {
    FILE *fh;
    char buf[500];
    fh = fopen(filepath, "r");

   if (!fh)
       exit(1);

我的代码总是在 exit(1) 处退出,我从两个 printf 语句中得到以下(错误)输出:

/proc/bbb07a63/cmdline
/proc/3148905059/cmdline

我做错了什么

请注意,我是 c 的新手,如果新手提出问题,我很抱歉,还要注意 printf 的输出每次都不同,我认为这意味着它是垃圾。

最佳答案

对于 unsigned int *arr ,表达式sizeof(arr)是指针值的大小(例如 32 位系统上的 4 个字节),而不是该指针所指向的内容的“长度”。这与 unsigned int arr[100] 之类的声明不同。 ,其中sizeof(arr)会给你100*sizeof(unsigned int) 。您可能接管了模式sizeof(arr) / sizeof(arr[0])来自像 unsigned int[100] 这样的数组声明,但这不能用于动态分配的内存。所以你宁愿写 for (size_t i = 0; i < 200; i++) ,或写 #define ARRSIZE 200并使用ARRSIZE然后是malloc和 for 循环。

其次,正如 GrahamS 所提到的,您没有显示任何初始化内存的代码。如果没有这样的初始化,则程序的行为是未定义的。

关于c - 在c中循环整数数组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44091258/

相关文章:

c - 在嵌套 for 循环中间出现段错误

c - 为什么编译器不给出冲突错误?

有人可以帮我解释一下这个递归函数吗?

c# - 如何从数组中找到第 n 个重复项

r - 用相同的对象有效地填充列表

java - 内存分析 : How to detect which application/package is consuming too much memory

c - 如何在Codeblocks中添加conio?

ios - 如果 Set 包含它,则更改数组内所有元素的变量

actionscript-3 - ActionScript - 用于内存管理的原始/非原始对象之间的区别?

javascript - 如何确保多值字段是数组