小编use*_*293的帖子

如何解除分配2d数组?

这已经有很多东西了.他们似乎都暗示你每次调用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 arrays pointers

9
推荐指数
2
解决办法
814
查看次数

c中的自引用结构

我正在尝试将一些编译好的代码作为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相同的行为?

c struct

4
推荐指数
2
解决办法
318
查看次数

C#=意思是2个不同的东西

我怀疑这背后有一些非常重要的东西,我完全没有注意到.我可以写

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].这是怎么回事?

c#

3
推荐指数
1
解决办法
187
查看次数

标签 统计

c ×2

arrays ×1

c# ×1

pointers ×1

struct ×1