当我编译这段代码时,它说“错误C4700:未初始化的局部变量'b'使用了”。我不知道我现在要做些什么来解决这个问题。我既不是IT学生也不是技术人员,但我非常喜欢学习C ++,而且我自己也在学习。我已经在这一天了。
非常感谢
#include <stdio.h>
#include <iostream>
//A.
//1--
void InputArray(int *a, int &n)
{
printf("Insert n = ");
scanf("%d", &n);
a = new int[n];
for (int i=0; i<n; i++)
{
printf("Enter the key's a[%d] values: ", i);
scanf("%d",&a[i]);
}
}
void main()
{
int *b, m;
InputArray(b, m);
}
答案 0 :(得分:14)
b
按值传递,这意味着将复制,但由于它未初始化,因此会收到警告。只需初始化它:
int *b = nullptr;
或
int *b = NULL;
答案 1 :(得分:1)
如果希望函数修改调用者的变量,则按引用传递:
void InputArray(int *&a, int &n)
^
您的版本按值传递未初始化的指针;该函数修改了它的本地副本,但使b
处于未初始化状态。
答案 2 :(得分:1)
指针未默认初始化,因此您的变量b
未初始化,这是错误的来源。您必须初始化此变量才能解决此问题:
void main()
{
int *b = NULL, m;
InputArray(b, m);
}
解决此问题后,代码中还有其他问题。从你调用函数的方式来看,你希望持久地改变传递给它的指针b
,这样b
将指向在函数返回后用new
分配的内存。但是你按值传递一个指针,这意味着在函数中所做的更改不会反映在原始变量b
中,而原始变量b
仍将指向它在调用函数之前指向的内容。 (数组将在函数内部分配,并在函数返回后保留在内存中,但由于void InputArray(int*& a, int& n)
不会指向它而泄漏此内存)。要解决此问题,您必须pass pointer by reference:
delete
另外:new
在哪里?请记住:将delete
映射到new
是双射的:每个delete
对应于放置在代码中的单个{{1}}。
答案 3 :(得分:-1)
首先,您是否学会了如何正确使用指针?因为如果你知道如何使用指针你应该知道当你声明一个指针时你需要先将它初始化为NULL才能使用它,如果我错了就纠正我。
实施例
int *b = nullptr;
int *b = NULL;
int *b = 0;
int *b(0);
这是完全相同的事情,但以不同的方式