【问题标题】:C malloc with string arrayC malloc 与字符串数组
【发布时间】:2016-01-22 07:38:54
【问题描述】:

我试图通过用char** 表示这个数组来创建一个字符串数组。但是,我在这条线上遇到了分段错误:

char** values = malloc(count*sizeof(char*)+1); //+1 for terminating NUL

有什么建议吗? countsize_t 类型的变量。感谢您的所有帮助!

编辑:之前的代码:

size_t count = 0;
char** counter = params;
while(*counter) {
    count++;
    counter += sizeof(char*);
}
count++; //one space for NULL
char** values = malloc((count + 1) * sizeof(char*)); // +1 for terminating NULL

【问题讨论】:

  • 可能是 count * lenghtOfEachString,或者我问你 sizeof(char*) 是多少?
  • 稍后我会在数组中的每个char* 处保留空间,但它甚至没有到达那一行。它是一个指向字符的指针数组,因此字符串长度在这一行并不重要,只要这些字符的空间在其他地方保留,它们稍后会保留。
  • 但是 C 不能处理这个问题,你可以创建一个指针数组,然后在运行时创建每个空间,否则你必须给出一个 maxlenght
  • 这不就是这个吗?我正在尝试创建您所说的这个指针数组,但它给了我一个段错误。
  • count 在运行时的值为 3。我在 Eclipse 中调试它,它说段错误在这一行触发。我正在单步执行代码,因此它应该在执行此行后暂停。

标签: c arrays string malloc


【解决方案1】:

由于values 是一个指针数组,因此您使用的代码有问题。应该是:

char** values = malloc((count + 1) * sizeof(char*)); // +1 for terminating NULL

因为您需要sizeof(char*) 字节(而不是1 字节)作为终止NULL。 但是,尚不清楚仅此行是否导致段错误...可能是由于内存对齐问题(由于您正在使用的行中的+1 错误放置而出现)...

【讨论】:

  • 刚试过;没有运气。那是导致它的行,因为我在 Eclipse 中调试它,当该行执行时,sigfault 被触发。
  • 您使用的count 的值是多少?
  • count 在此行执行时的值为 3。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
  • 2014-08-26
  • 2018-10-10
  • 1970-01-01
相关资源
最近更新 更多