微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果插入数组,程序将在子进程的早期终止

如何解决如果插入数组,程序将在子进程的早期终止

所以我遇到的问题是,当将“ int pipefd [2]”行插入到程序中时,它仅到达“ Debug3”一次并在此结束。文件也不会写入任何内容。没有线路,程序正在运行。错误从何而来?我看到声明的“ int数组”蜜蜂与在子进程中执行的for循环之间没有任何联系。

#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/wait.h>

int main(int argc,char* argv[]) {

    int pipefd[2];

    pid_t pid;
    int count;

    count = atoi(argv[1]);

    open("a.txt",O_CREAT);
    int fd = open("a.txt",O_RDWR);


    switch (pid = fork()) {
        case -1:
            printf("Failed to create child\n");
            exit(EXIT_FAILURE);
            break;

        case 0:;

            char *str;

            printf("Debug1\n");

            for (int i = 0; i < count; i++) {
                printf("Debug2\n");
                sleep(1);
                printf("Debug3\n");
                sprintf(str,"Writer-PID: %d -> record-nr: %6d\n",getpid(),i);
                printf("Debug4\n");
                write(fd,str,strlen(str));

            }
            printf("Debug5\n");

            close(fd);

            break;

        default:

            wait(&pid);

            break;
    }

    return 0;

}

解决方法

char* str;

这将str定义为char指针,但没有给它指向的位置,也没有为其分配任何内存。它尚未初始化。如果要分配一些长度已知的空间,则可以将其声明为数组:

char str[100];

如果您的长度在编译时未知,则应使用mallocfree

char* str = malloc(size_to_allocate * sizeof(char));
// code here
free(str); // to avoid memory leak

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?