c - 变量 'pminutes' 未初始化就被使用

标签 c pointers

我不断收到此错误消息:

The variable 'pminutes' is being used without being initialized.

这是我的代码:

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

void ConvertMinutesToHM(int time_minutes, int *phours, int *pminutes);

void main ()
{
    int min, *phours, *pminutes;
    printf("Enter a number of minutes:\n");
    scanf("%d", &min);
    ConvertMinutesToHM(min, phours, pminutes);
    printf("Hours=%d", phours);
    printf("Minutes=%d", pminutes);
}

void ConvertMinutesToHM (int time_minutes, int *phours, int *pminutes)
{
    int hours, minutes; 
    *phours = time_minutes / 60;
    *pminutes = time_minutes % 60 * 60;

}

最佳答案

在 c 编程语言中,非全局变量、静态变量或由程序员显式初始化的变量根本不会被初始化,读取它们会导致未定义的行为。

您正在将它传递给一个将取消引用指针的函数,并且由于它未初始化,该函数将从内存中的未确定位置读取,因为指针所持有的值未在任何地方定义。这并不意味着指针没有保存值,它意味着该值是一个随机垃圾值,不能用作地址,但如果您不小心并取消引用它,它就会成为地址。

您可以通过使其指向将在堆栈上分配的实际变量并使其指向有效内存来初始化它,就像这样

int minutes;
int *pminutes = &minutes;

当然,您可以简单地直接传递&minutes,但是这样,pminutes 指针将保存堆栈变量minutes 的地址已正确分配,但未初始化。

minutes 变量不需要初始化,因为它旨在用作存储函数将读取的值并将其存储到 pminutes 指向的任何内容中。

问题是 pminutes 是一个指针,当程序试图读取它持有的地址时,不初始化它会导致未定义的行为。

显式初始化大多数变量仍然是很好的做法,但我也认为当您确定它们将在某处初始化并且添加显式初始化没有意义时,最好不要这样做,从而使代码更难理解.

关于c - 变量 'pminutes' 未初始化就被使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41648225/

相关文章:

c - 函数参数中的宏

swift - 重叠访问指针

c++ - 拥有对象实例与拥有指针

c - 我如何证明缓存未命中?

c execvp grep环境变量,当grep没有找到任何东西时

javascript - Node ffi 结构变量数组

c - 为 2 个指针分配相同的值,而不是使它们的引用相等(C 中的指针)

c - Lex:标识符与整数

c++ - 使用 static_cast<> 对指针进行类型转换

c++ - Reverse String (Leetcode) 使用 C++,为什么我不能将新字符串作为方法返回