这已经有很多东西了.他们似乎都暗示你每次调用malloc时都需要做的就是免费调用,并且可能最后释放"指针指针" - 所以你不会在它被释放后最终引用它
例如,如果我有
int** myPtr
Run Code Online (Sandbox Code Playgroud)
然后我只需要
free(myPtr[j])
Run Code Online (Sandbox Code Playgroud)
对于每个j,在最终释放指针之前
free(myPtr)
Run Code Online (Sandbox Code Playgroud)
凉.我在我的程序中已经完成了几次,它似乎工作得很好 - 除了一个案例.我试图弄清楚这种情况有什么不同,我能够在最小的程序中复制症状.
#include "stdafx.h"
#include <stdlib.h>
signed char** getPtr()
{
unsigned char n = 10;
unsigned char k = 2;
signed char** myPtr = (signed char**)malloc(n*sizeof(signed char));
if (myPtr == NULL) {return NULL;}
for (unsigned char i = 0; i < n; i++)
{
myPtr[i] = (signed char*)malloc(k*sizeof(signed char));
if (myPtr[i] == NULL) {return NULL;}
}
for (unsigned char j = 0; j < n; j++)
{
for (unsigned …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一些编译好的代码作为C++在VS2010中编译为c(gcc c99)并且我遇到了编译错误.它与其他自引用结构问题略有不同,因为我有2个用户定义的类型,每个类型都包含指向彼此的指针.看来我的前瞻性声明还不够.
struct potato; //forward declare both types
struct tomato;
struct potato
{
potato* pPotato; //error: unknown type name ‘potato’
tomato* pTomato;
};
struct tomato
{
potato* pPotato;
tomato* pTomato;
};
Run Code Online (Sandbox Code Playgroud)
为什么这不适用于gcc 99?为什么它可以作为C++代码?我应该如何修改它以获得与c99相同的行为?
我怀疑这背后有一些非常重要的东西,我完全没有注意到.我可以写
int b = 5;
int a = b;
a = 2;
Run Code Online (Sandbox Code Playgroud)
从我能说的最好,这给了我两个独立的变量.最初,a设置为5,但是我可以在不改变b的情况下将a更改为2
但是,我可以写
double[] b = { 1, 2, 3, 4};
double[] a = b;
a[2] = 9;
Run Code Online (Sandbox Code Playgroud)
现在看来,我没有2个独立的变量,而是对同一个实体有2个引用.现在改变a [2]会改变b [2].这是怎么回事?