是的,我读过这个问题和答案:Passing an array by reference in C?。我有一个类似的问题,并从这个问题中实现了同样的想法。
但是,我仍然从以下代码中得到一个错误:
#include <iostream>
void FillArray(int** myArray)
{
free( *myArray ) ;
* myArray = (int*) malloc(sizeof(int) * 2);
*myArray[0] = 1;
*myArray[1] = 2;
}
int main()
{
int* myArray = NULL;
FillArray(& myArray);
return 0;
}在FillArray函数结束后,我得到了以下运行时错误:
未处理异常在Program.exe 0xC000005中的0x773115de :访问冲突写入位置0xcccccccccc。
我正在使用Visual,打开VisualC++空项目。以及名为main.cpp的文件。这是否意味着它是用C++编译器而不是C编译器编译的?如果是这样,我如何打开一个只编译C编译器的文件?我尝试用main.c重命名main.cpp,但仍然存在相同的问题。(我问这个问题,是因为我读了一些关于“通过引用传递”的文章,发现它在C和C++中是不同的。)
很抱歉提出这个非常基本的问题。
如果有任何帮助,我将不胜感激,
萨伊特。
发布于 2012-05-03 20:15:13
优先级并不如您所期望的那样工作。试试看:
(*myArray)[0] = 1;
(*myArray)[1] = 2;(注:iostream不是C,而是C++。)
发布于 2012-05-03 20:13:30
你的问题是运算符优先的问题。
[]运算符比*运算符绑定得更紧密,因此
*myArray[1] 是相同的
*(myArray[1]). 这是错误的,因为顶层指针只为一个指针分配了足够的内存。你想:
(*myArray)[1] = 2;另外,没有什么好的理由像你这样把C和C++混合在一起。显然这里有C++代码,所以更喜欢new和delete而不是malloc和free,因为后两者不考虑复杂对象的构造函数和析构函数。
发布于 2012-05-03 20:13:47
好:
int main()
{
int* myArray = NULL;
FillArray(& myArray);
...好:
void FillArray(int** myArray)
{
* myArray = (int*) malloc(sizeof(int) * 2);灾难性的坏:
void FillArray(int** myArray)
{
free( *myArray ) ;
* myArray = (int*) malloc(sizeof(int) * 2);
...更好的是:
void FillArray (int** myArray)
{
if (myArray)
free (*myArray);
*myArray = (int*) malloc(sizeof(int) * 2);
...此外:
*(myArray[0]) = 1;
*(myArray[1]) = 2;https://stackoverflow.com/questions/10438625
复制相似问题