SIGABRT (信号 SIGABRT) 在运行 malloc 时

SIGABRT (signal SIGABRT) while running malloc

提问人:Haznut 提问时间:12/6/2021 最后编辑:Haznut 更新时间:12/6/2021 访问量:120

问:

当 malloc 多次运行时,程序中会出现问题。我收到错误:。我看过类似的问题,但到目前为止没有任何帮助。SIGABRT (signal SIGABRT)

该程序很简单,因此如果您愿意,可以跳到下面的程序。我还给出了一个解释,以防万一您可能需要它。

如果您有任何问题,请告诉我,我一定会回答的。

该计划解释说:

在main中,我有一个指针数组(线),其中每个指针都指向一个表示线的字符串。然后,我调用一个函数来从输入中获取行。

getlines 函数有两个 for 循环,一个在另一个里面。

  1. 外部循环移动到指针数组中的下一个指针。由于每个指针代表一条线,因此它会移动到内循环末尾的下一行。
  2. 内部循环添加字符,直到文件末尾或到达换行符。它还检查字符串是否不超过 MAXLINE。
    1. 在内部循环的开头,malloc 用于在数组内添加一个指针,该指针将引用字符串(行)。
    2. 然后从输入添加字符,并链接到此指针。

以下是程序:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAXLINES 100
#define MAXLINE 100

int main() {
    char *line[MAXLINES];
    getlines(line);
}

void getlines(char **line){
    int c = 0;
    char *l = 0;
    for(;c!= EOF; line++) {
        for (*line = NULL; (l - *line) != MAXLINE && (c = getchar()) != EOF && c != '\n'; l++) {
            if (*line == NULL) {
                *line = malloc(sizeof(char));
                l = *line;
            }
            *l = c;
        }
        *l = '\0';
    }
    *line = NULL;
}

再次感谢你:)

数组 C 函数 指针 malloc

评论

0赞 Haznut 12/6/2021
为了避免混淆,我添加了 Maxline 和 Maxlines 来区分它们
0赞 Sobhan 12/6/2021
包含不见了...
0赞 Haznut 12/6/2021
@SobhanMohammadpour我确实有它们,忘了在上面添加它们,只是添加了它们。
1赞 ikegami 12/6/2021
您的代码可以执行以下顺序:.这将分配给超出分配块的点数。问题只是缺失了吗?还有其他问题。 是错误的。您想将当前与原始 进行比较。*line = malloc(sizeof(char)); l = *line; l++; *l = c;*ll* MAXLINEmalloc(l - *line) != MAXLINElineline
0赞 Haznut 12/6/2021
@ikegami 实际上,l++ 在 *l = c; 之后递增。请看一下括号,感谢您的帮助。malloc 会发生错误。 只是在计算总距离。*line 指向起始位置,而 l 在递增后指向新位置(l - *line) != MAXLINE

答: 暂无答案