Your code seems to work, if I change DilatedCNN to nn.Conv2d:
class SplitDilatedCNN(nn.Module):
    def __init__(self,channels=4,depth=5,kernel=5,split=[3,1]):
        super(SplitDilatedCNN, self).__init__()

        self.channels = channels
        self.depth = depth
        self.kernel = kernel
        self.split = split
        self.channelsAux = 0

        self.dcnn = nn.ModuleList()
        for i in range(len(split)):
            self.dcnn.append(nn.Conv2d(
                                in_channels=split[i],
                                out_channels=split[i],
                                kernel_size=3,
                                stride=1,
                                padding=1))

    def forward(self, x):
        x = x.split(self.split,1)
        x = [self.dcnn[j](x[j]) for j in range(len(self.split))]
        return torch.cat(x,1)


model = SplitDilatedCNN()
x = torch.randn(1, 4, 24, 24)
output = model(x)
output.mean().backward()
print(model.dcnn[0].weight.grad)

Could you post or check the implementation of DilatedCNN?
Maybe the in-place operation is performed there.