为什么我的简单代码在C++中不起作用?
Why don't my simple code work in C++?
函数 realloc(( 中的错误:指针无效
int indZero = 0;
int *perZero=NULL;
int zero = 0;//Initialization
ProcessBit(zero,&indZero,&perZero);// Call function
void ProcessBit(int num,int *ind,int **mas)
{
mas=(int**)realloc(&mas,((*ind))*sizeof(int));// Error
mas[num-1]++;//it's correct line
}
几个问题:
-
要
realloc
的第一个参数是原始指针(或NULL
(。 -
您的
ProcessBit
并没有真正正确模拟按引用传递。 -
您可以使用负索引。
-
mas
是指向int
的指针,但您可以将其用作指向int
的指针。
"固定"版本可能如下所示:
void ProcessBit(int num, int *ind, int **mas)
{
int *temp = realloc(*mas, (*ind + 1) * sizeof(int));
if (temp == NULL)
{
// TODO: Handle error
// TODO: return or exit(EXIT_FAILURE)
}
*mas = temp;
(*mas)[*ind] = 0; // Initial initialization
if (num > 0)
{
(*mas)[num - 1]++;
}
++*ind; // Increase the size
}
现在,如果这真的是C++(当你标记你的问题时(,那么你应该改用std::vector
,这将用更简单的代码解决几乎所有的问题。
参数
错误。由于您正在尝试重新分配 NULL 指针,因此它的行为应该像 malloc;但是,在 CSTDlib 中声明的标头是
void* realloc( void* ptr, std::size_t new_size );
形式参数mas
已经是指针的地址,因此调用应该是
*mas=(int*)realloc(*mas,((*ind))*sizeof(int));
(*mas)[num-1]++;
因为 realloc 通过复制而不是引用来处理和返回指针。
将存储内存位置 (NULL( 地址的内存位置的地址传递给 ProcessBit
函数,然后将该位置的地址传递给realloc
函数。该函数尝试在堆栈上重新分配存储变量mac
的内存。难怪它是一个无效的指针。
通过传递&mac
您只是在取消引用指针时朝着错误的方向迈出了一步。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 嵌套While循环不起作用(C++问题)
- C++Matching Brackets 2解决方案不起作用
- 为什么这段代码不起作用,我该如何解决?
- 我正在开发服务器,ip作为参数传递不起作用