标签: pointers

c ++如何释放和删除指向对象的2D数组

在SO问题[如何在C++中分配2D指针数组] [1],接受的答案还记录了如何解除分配和删除所述数组的正确过程,即"小心删除包含的指针,行数组和列数组都是以正确的顺序分开的." 所以,我已经成功地在细胞自动机模拟程序中使用这个2D阵列.但是,我不能让这个数组的内存管理正确.除了上面的参考文献之外,我没有看到如何做到这一点的答案.

我按如下方式分配2D数组:

Object*** matrix_0 = new Object**[rows];
    for (int i = 0; i < rows; i++) {
        matrix_0[i] = new Object*[cols];
    }
Run Code Online (Sandbox Code Playgroud)

我徒劳地尝试(根据Valgrind)正确地取消分配上面的数组如下:

for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        matrix_0[i][j] = NULL;
    }
}
delete [] matrix_0;
matrix_0 = NULL;
Run Code Online (Sandbox Code Playgroud)

很明显,我错过了行和列部分作为参考[1]建议.你能告诉我我错过了什么吗?提前致谢.

[1] :( 2009年11月20日)如何在C++中分配2D指针数组

c++ arrays pointers

0
推荐指数
1
解决办法
5474
查看次数

奇怪的free()无效指针C.

我修改了很多次这段代码的问题(但总是出现错误):似乎在释放"过滤器"的最后一个索引时出错

char** read_and_filter(int fd) {
  char buf[MAXLENGTH];
  char **bufs=NULL;
  char ch;
  int j = 0, len = 0, t = 0;
  while (!t && read(fd,&ch,1) == 1) {
    switch (ch) {
    case '\n':
      t = 1;
    case ' ':
      bufs = realloc(bufs, (j+1)*sizeof(char*));
      bufs[j++] = strndup(buf,len);
      memset(buf,0,len);
      len = 0;
      break;
    default:
      buf[len++] = ch;
    }
  }
  bufs[j] = 0;
  return bufs;
}

int main(int argc, char **argv) {
  char **filter;
  int i,fd = open("input.txt",O_RDONLY);
  filter = read_and_filter(fd);
  for(i = …
Run Code Online (Sandbox Code Playgroud)

c malloc free pointers realloc

0
推荐指数
2
解决办法
819
查看次数

如何获得一个指向u32功能的指针?

如何获得指向函数的指针u32

我有一个函数,指向函数的指针:

fn getter_of_functions<T>(pointer: T) {
    // ...
    /* 

    This code don't compile ...
    let fun_ptr: u32 = unsafe {
        mem::transmute::<T, u32>(callback)
    };

    */
}

fn function() {
    println!("hello ...");
}

getter_of_functions(function);
Run Code Online (Sandbox Code Playgroud)

如何获得它(我必须有一个通用的功能)?我经常犯的错误是:

cannot transmute to or from a type that contains unsubstituted type parameters
Run Code Online (Sandbox Code Playgroud)

pointers function rust

0
推荐指数
1
解决办法
413
查看次数

无法正确推回struct C++中的向量

我目前有一个struct p,它包含另一个名为pg的结构的向量.这是进程结构:

struct p{
int i;
int s;
vector<pg*> pT;

void addP(struct pg* nP){
    pT.push_back(nP);
}
Run Code Online (Sandbox Code Playgroud)

};

在程序的其他地方,我创建了一个新的p结构:

struct p *p1= (struct p*) malloc(sizeof(struct p));
Run Code Online (Sandbox Code Playgroud)

然后为id和size分配值.我想在struct的pT向量中添加一个新页面.所以我决定我可以做p1-> addP(makeP()),其中makePreturns指向pg结构的指针,pg*.

这是一个链接到gdb在segfaults时显示的内容.它还提到它正在push_back线上发生. http://imgur.com/KZOGnI9

指针有问题吗?或者我没有为矢量正确分配内存?

c++ struct pointers vector

0
推荐指数
1
解决办法
615
查看次数

C++如何在没有其他人直接或间接引用该指针时删除对象指针

我有一个对象O1,它有指针.我通过复制构造函数创建了另一个对象O2.指针地址将被复制到对象O2中.当我离开O2的范围时,它将被删除.析构函数也将删除指针.这使得对象O1中的指针变得悬空.如何确保只有当我从O1出来时才删除指针.

在简短描述中,仅当没有其他人直接或间接引用该指针时,如何删除该对象指针.

class info {
    public:
        char *buf;
        int len;
        info(int l) {
            len = l;
            buf = new char[len];
            buf[0] = 'h';
        }
        ~info() {
            delete[] buf;
        }
};
int main() {
    info O1(100);
    cout << O1.buf << "\n";
    {
        info O2(O1);
    }
    cout << O1.buf << "\n";
}
Run Code Online (Sandbox Code Playgroud)

这里主要结尾处的O1的析构函数将获得一个SIGABT信号,用于尝试释放已经通过O2删除的O1.buf引用的内存.

c++ pointers

0
推荐指数
1
解决办法
106
查看次数

分段错误 - 我如何弄清楚我的代码有什么问题?- C

我对编程非常陌生,正在尝试制定一个程序.但是,我没有得到任何有用的错误.该程序编译,但我在执行中途收到"分段错误"消息.在这个程序中,我要求输入一个月和一天,然后调用一个函数(我的计划是传递日期字符串,以及tempmonth数组的地址和tempday整数),将日期分为月份和一天,并将它们存储在地址中.然后在main中打印数据.我已经花了好几个小时来弄清楚我用指针和地址做错了什么......但我无法理解它.这是整个代码:

#include <stdio.h>
void separate(char*,char*,int*);

int main()

{    

        char date[12];
        printf("Enter a month and a day: ");
        fgets(date,12,stdin);

        char tempmonth[10];
        int tempday;
        separate(date,&*tempmonth,&tempday);

        printf("month is %s and day is %d",tempmonth,tempday);

        return 0;
}

void separate(char*date,char*tempmonth, int*tempday)

{

        sscanf(date,"%s %d",*tempmonth,*tempday);
}
Run Code Online (Sandbox Code Playgroud)

(由于某种原因,*不会按照char 日期和char tempmonth 打印- 它应该在那里.)提前谢谢你:)

c pointers segmentation-fault

0
推荐指数
1
解决办法
195
查看次数

C中的char stringA [LEN]和char*stringB [LEN]之间有什么区别?

我读了几个类似的问题,C:字符指针和数组之间的差异,是什么个char []与char*S之间的区别?,char array []和char*array有什么区别?但他们似乎都不清楚我的怀疑.

我知道

char *s = "Hello world";
Run Code Online (Sandbox Code Playgroud)

使字符串不可变,而

char s[] = "Hello world";
Run Code Online (Sandbox Code Playgroud)

可以修改.

我怀疑的是,如果我这样做char stringA[LEN]; ,char* stringB[LEN];他们有什么不同吗?或者stringB在之前的情况下再次变得不可变?

c arrays string pointers

0
推荐指数
1
解决办法
143
查看次数

getc函数产生段错误

程序:

#include<stdio.h>
#include<string.h>

char *f_gets(char *s, int n, FILE *iop)
{
    int c=0;
    char *cs;
    cs = s;

    while (--n > 0 && (c = getc(iop)) != EOF)
    {
        if ((*cs++ = c) == '\n')
            break;
    }
    *cs = '\0';
    return (c == EOF && cs == s) ? NULL : s;
}


main(int argc, char *argv[])
{
    FILE *fp1,*fp2;
    char s2[100],s1[100];
    if (argc <= 2 )
        printf("2 argument needed \n"); 
    else
        if((fp1=fopen(argv[1],"r"))== NULL && (fp2=fopen(argv[2],"r"))==NULL)
            printf("cat: can't open The …
Run Code Online (Sandbox Code Playgroud)

c unix linux pointers

0
推荐指数
1
解决办法
103
查看次数

返回此指针赋值的地址是什么?

前几天我正在玩指针,并提出以下代码,我明确地将int变量转换为int *并打印出明确转换变量的地址

#include <stdio.h>

int main (void)
{
    int d;
    int *p1, *p2;

    printf("%p\n", p1 = &d);
    printf("%p\n", p2 = (int *) d);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

ffbff71c
ffbff878
Run Code Online (Sandbox Code Playgroud)

我的问题是第二个地址是什么,那里包含的内容是什么?

c pointers

0
推荐指数
1
解决办法
42
查看次数

查找数字5出现在0 - 4322之间的次数

这段代码似乎对我不起作用.它输出的数字17显然是错误的.如果遇到5,15,25,50等数字,计数器应该会上升.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main(void) {
    int i;
    int counter; 
    char num[4322];

    for (i = 1; i < sizeof(num); i++){
        num[i] = i;
        if ( strstr(&num[i], "5")){
            counter = counter + 1;
        }
    } 

    printf("%d", counter);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c arrays string pointers strstr

0
推荐指数
1
解决办法
50
查看次数

标签 统计

pointers ×10

c ×6

arrays ×3

c++ ×3

string ×2

free ×1

function ×1

linux ×1

malloc ×1

realloc ×1

rust ×1

segmentation-fault ×1

strstr ×1

struct ×1

unix ×1

vector ×1