首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C引用传递数组

使用C引用传递数组
EN

Stack Overflow用户
提问于 2012-05-03 20:10:54
回答 3查看 1.1K关注 0票数 3

是的,我读过这个问题和答案:Passing an array by reference in C?。我有一个类似的问题,并从这个问题中实现了同样的想法。

但是,我仍然从以下代码中得到一个错误:

代码语言:javascript
复制
#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++中是不同的。)

很抱歉提出这个非常基本的问题。

如果有任何帮助,我将不胜感激,

萨伊特。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-03 20:15:13

优先级并不如您所期望的那样工作。试试看:

代码语言:javascript
复制
(*myArray)[0] = 1;
(*myArray)[1] = 2;

(注:iostream不是C,而是C++。)

票数 10
EN

Stack Overflow用户

发布于 2012-05-03 20:13:30

你的问题是运算符优先的问题。

[]运算符比*运算符绑定得更紧密,因此

代码语言:javascript
复制
*myArray[1] 

是相同的

代码语言:javascript
复制
*(myArray[1]).  

这是错误的,因为顶层指针只为一个指针分配了足够的内存。你想:

代码语言:javascript
复制
(*myArray)[1] = 2;

另外,没有什么好的理由像你这样把C和C++混合在一起。显然这里有C++代码,所以更喜欢newdelete而不是mallocfree,因为后两者不考虑复杂对象的构造函数和析构函数。

票数 2
EN

Stack Overflow用户

发布于 2012-05-03 20:13:47

好:

代码语言:javascript
复制
int main()
{
   int* myArray = NULL;
   FillArray(& myArray);   
   ...

好:

代码语言:javascript
复制
void FillArray(int** myArray)
{
   * myArray = (int*) malloc(sizeof(int) * 2);

灾难性的坏:

代码语言:javascript
复制
void FillArray(int** myArray)
{
   free( *myArray ) ;
   * myArray = (int*) malloc(sizeof(int) * 2);
   ...

更好的是:

代码语言:javascript
复制
void FillArray (int** myArray)
{
   if (myArray)
     free (*myArray);
   *myArray = (int*) malloc(sizeof(int) * 2);
   ...

此外:

代码语言:javascript
复制
   *(myArray[0]) = 1;
   *(myArray[1]) = 2;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10438625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档