c - malloc.c : No such file or directory

标签 c malloc runtime-error

我正在尝试用 C 语言编写一个程序,它接受输入流并根据字符串中空格的出现来中断输入,并从中创建一个二维数组。例如

如果输入是:

这是猫

输出:

这个


我的代码如下:

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

int main(){
int ** a;
int * element;
int i;
int size = 2;
int element_size = 2;
int element_count = 0;
char c;
int flag = 0;

if((a = (int **)calloc(size, sizeof(int **))) == NULL){
    printf("Not enough space");
    exit(0);
}
for(i = 0; i <= size; i++){
    element_size = 2;
    element_count = 0;
    flag = 0;
    if(i >= size){
        size *= 2;
        if((a = (int **)realloc(size, sizeof(int **))) == NULL){
            printf("Not enough space");
            exit(0);
        }
    }
    if((element = (int *)calloc(element_size, sizeof(int *))) == NULL){
        printf("Not enough space");
        exit(0);
    }
    while(1){
        c = getchar();
        if(element_count >= element_size){
            element_size *= 2;
            if((element = (int *)realloc(element_size, sizeof(int *))) == NULL);
        }
        if(c == ' '){
            flag = 0;
            break;
        }
        else if(c == '\n' || c == '\0' || c == '\r'){
            flag = 1;
            break;
        }
        else{
            element[element_count] = (char)c;
            element_count++;
        }
    }
    element[element_count] = '\0';
    *a[i] = element;
    if(flag == 1)break;
}
for( i = 0; i < size; i++){
    printf("%s\n", *a[i]);
}
return 0;
}

此代码在 coredump 中给出运行时错误 SIGSEV

使用 gdb 分析核心转储显示:

程序因信号 SIGSEGV(段错误)而终止。 #0 __GI___libc_realloc(oldmem=0x4,字节=8)位于 malloc.c:2977 2977 malloc.c:没有这样的文件或目录。

这个错误是什么意思?

如果有人能够指出我的代码中的错误或任何新的方法,这将非常有帮助。

最佳答案

for(i = 0; i <= size; i++)

应该是

for(i = 0; i < size; i++)

a = (int **)calloc(size, sizeof(int **))) 

应该是

a = calloc(size, sizeof(int *))) 

i<=size您正在越界访问并具有未定义的行为。

int **a是一个指向指针的整数指针,您需要为指针分配内存,即 int *

关于c - malloc.c : No such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31008718/

相关文章:

C++:memcpy 是基于 POD 的子对象 UB 吗?

java - Java 运行时环境的 fatal error

Excel VBA - 将查找结果存储在范围变量中

c++ - 节点代码或算法的通用树父

c - 当使用具有不同参数的函数时,我应该在函数原型(prototype)中放置什么?

c - 为什么这两个指针访问相同的元素?

android - flutter 任务 ':app:checkDebugAarMetadata' 执行失败

c - 关于实用程序 'df' 中的库 <libutil.h>,Linux

c - 使用 malloc() 在 for 循环中删除数组的问题

c - C 中 malloc 的问题