C:带有 2D 阵列的 SEGFAULT

标签 c arrays pointers memory-management

我正在尝试将 3 个字符串从 2D const char 数组复制到 char 的双指针中。

char **E = malloc(sizeof(char));
const char *e[3] = {"aa", "bb", "cc"};
  for (int k=0; k<3; k++)
    {
      E[k] = malloc(sizeof(char));
      strcpy(E[k], e[k]); //crash occurs here
    }

最佳答案

这个解决方案是当你希望E指向相同的常量字符串时 作为变量 e。

试试这个代码:

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

 int
 main(void)
 {
    char **E = malloc(3*sizeof(char *));
    const char *e[3] = {"aa", "bb", "cc"};
    int k;

    for (k=0; k<3; k++)
    {  
       E[k] = e[k];      
    }
    for( k=0; k<3; k++ )
    {
       printf( "%s\n", E[k]);
    }


    return 0;
}

这里是解释。

变量“e”是一个由 3 个指向常量字符的指针组成的数组。

假设“aa”存储在内存地址 100 中。

假设“bb”存储在内存地址 200 中。

假设“cc”存储在内存地址 300 中。

“e”变量如下所示:

e[0] e[1] e[2]

|------|--------|------|

| 100 | 100 200 | 200 300 |

|------|--------|------|

E[k] = e[k];赋值将导致 E 看起来像

E[0] E[1] E[2]

|------|--------|------|

| 100 | 100 200 | 200 300 |

|------|--------|------|

关于C:带有 2D 阵列的 SEGFAULT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43301981/

相关文章:

c - 调用sigaction()时sa_sigaction设置为NULL是什么意思?

android - 一个进程试图 chmod 一个文件,而另一个进程已经写入该文件?

c - 是否有一种类型安全的方法来获取 C 中数组的元素计数?

java - 如何将数字数组传递到jsp页面?

使用指针的 C++ 复制构造函数

python - 如何检查python中的指针是否为空?

c++ - 有没有线程太多这样的事情?

c++ - 更简单的链表遍历的指针对指针技术是什么?

arrays - 按长度均匀排序数组项的 Ruby 数组

c - 多维数组中的指针