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

问题描述

所以我遇到的问题是,当将“ 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...