首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么它导致SIGSEGV (信号11) (核倾倒)?

为什么它导致SIGSEGV (信号11) (核倾倒)?
EN

Stack Overflow用户
提问于 2020-05-15 07:25:21
回答 1查看 176关注 0票数 0

这里有一个函数,它从struct获取一个字符串数组,并返回struct integer_array。

代码语言:javascript
复制
#include "string.h"
#include "stdlib.h"
integer_array* my_count_on_it(string_array *p1)
{
    integer_array *pusher;
    int size = p1->size;
    char** str = p1->array;
    pusher = (integer_array*) malloc(size*sizeof(integer_array));

    for (int i = 0;i<size;i++)
    {
        pusher->array[i] = strlen(str[i]);
    }
    return pusher;
}

功能原型(C):

代码语言:javascript
复制
  typedef struct s_string_array {
    int size;
    char** array;
  } string_array;

 typedef struct s_integer_array {
   int size;
   int* array;
 } integer_array;

@param {string_array*} param_1
@return {integer_array*}


integer_array* my_count_on_it(string_array* param_1) {

}

这就是它的工作原理。

输入/返回示例:

输入: "This“、"is”、"the“、"way”

返回值: 4、2、3、3

输入: "aBc“

返回值:3

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-15 07:38:17

integer_array *pusher初始化良好。但是它中的单个指针也应该被初始化。您可能想要做这个pusher->array = (int*) malloc(sizeof(int) *size)。但老实说,我并没有掌握你想要通过这个函数调用实现什么。您声明了一个integer_array数组,但是您似乎只使用了第一个元素,我怀疑它们是代码中潜在的逻辑错误。

编辑:正如@DavidC.Rankin提到的,也可能是您没有为p1->array分配一个有效值

你可能想让你的功能像这样。

代码语言:javascript
复制
#include "string.h"
#include "stdlib.h"
#include "stdio.h"

typedef struct s_string_array {
    int size;
    char** array;
} string_array;

typedef struct s_integer_array {
    int size;
    int* array;
} integer_array;

integer_array* my_count_on_it(string_array *p1)
{

    integer_array* pusher = (integer_array*) malloc(sizeof(integer_array));

    pusher->size = p1->size;
    pusher->array = (int*) malloc(sizeof(int) * p1->size);

    for (int i = 0; i < p1->size; i++)
    {
        pusher->array[i] = strlen(p1->array[i]);
    }
    return pusher;
}

int main()
{
    string_array *p1 = NULL;

    /* collect data from user */

        // Setup p1{} struct

    integer_array* pusher = my_count_on_it(p1);

    for (int i = 0; i < pusher->size ; i++)
        printf(" %d ", pusher->array[i]);

    return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61813922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档